如何替换找到的模式中的子字符串,但保留其余的字符串?
(编辑:真实情况当然比下面的例子更复杂,我必须匹配xml标签内的出现。这就是为什么我必须使用正则表达式!)
假设我想将单词中字母“X”的出现更改为字母“Z”。
我想要
aaXaa aaX Xaa
成为
aaZa aaZ Zaa
查找包含“x”的单词的出现不是问题,如下所示:
[^ X \ S] X [^ \ S]
但正常的preg_match取代了完整的匹配,我希望模式中的任何内容除了“X”以保持原样。
这是在php中实现这一目标的最好方法吗?
答案 0 :(得分:14)
如果您的正则表达式仅匹配相关部分,则替换完整匹配(例如preg_replace('/X/', 'Z', $string)
)应该没有问题。
但是如果你需要正则表达式来包含不应该被替换的部分,你需要捕获它们并将它们插回:
preg_replace('/(non-replace)X(restofregex)/', '$1Z$2', $string);
答案 1 :(得分:2)
如果将X
替换为Z
非常简单,您也可以使用str_replace()
,这比在这种情况下使用preg
更快:
$sNew = str_replace("X", "Z", $sOld);
答案 2 :(得分:1)
试试这个
<?php
$string = 'The quick brown fox jumped over the lazy dog.';
$patterns[0] = '/quick/';
$patterns[1] = '/brown/';
$patterns[2] = '/fox/';
$replacements[2] = 'bear';
$replacements[1] = 'black';
$replacements[0] = 'slow';
echo preg_replace($patterns, $replacements, $string);
?>
以上示例将输出:
The bear black slow jumped over the lazy dog.
答案 3 :(得分:0)
你真的必须使用正则表达式吗?
$output = str_replace('X', 'Z', $input);