php/regex:如何替换已发现模式的一部分,但剩下的却是原样?

Cam*_*ata 11 php regex

如何替换找到的模式中的子字符串,但保留其余部分?

(编辑:真实情况当然比下面的例子更复杂,我必须匹配xml标签内的出现.这就是为什么我必须使用正则表达式!)

假设我想将单词中字母"X"的出现更改为字母"Z".

我想要

aaXaa aaX Xaa

成为

aaZaa aaZ Zaa

查找包含"x"的单词的出现不是问题,如下所示:

[^ X\s] X [^\s]

但正常的preg_match取代了完整的匹配,我希望模式中的任何东西除了"X"以保持不变.

这是在PHP中实现这一目标的最佳方法吗?

sou*_*rge 14

如果你的正则表达式只与相关部分匹配,那么替换完整匹配(如preg_replace('/X/', 'Z', $string))就没有问题.

但是如果你需要正则表达式来包含不应该被替换的部分,你需要捕获它们并将它们插回:

preg_replace('/(non-replace)X(restofregex)/', '$1Z$2', $string);
Run Code Online (Sandbox Code Playgroud)