这是输入字符串:
BQ^2*Z*(2*Y + Z) == AP^2*Y^2 - PQ^2*Y^2
这是所需的输出:
BQ^2*$z*(2*$y + $z) == AP^2*$y^2 - PQ^2*$y^2
我尝试使用以下正则表达式:
([A-Z])(?![A-Z])
但是,它只将第一个字符排除在替换之外。当前结果是:
B$1^2*$1*(2*$1 + $1) == A$1^2*$1^2 - P$1^2*$1^2
我应该如何更改上述正则表达式以获取正确的输出。
您可以使用环视正则表达式:
$repl = preg_replace('/(?<![A-Z])[A-Z](?![A-Z])/', '$$0', $str);
//=> BQ^2*$Z*(2*$Y + $Z) == AP^2*$Y^2 - PQ^2*$Y^2
RegEx说明:
(?<![A-Z])
:后面断言我们在前面的位置没有大写字母[A-Z]
:匹配大写字母(?![A-Z])
:先行断言我们在下一个位置没有大写字母附加说明:
对于您给定的输入,正则表达式也将起作用:
\b[A-Z]\b
但是会错过Y
输入中的匹配项:PQ^2*5Y^2
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句