条件正则表达式替换

时间:2015-03-13 19:40:37

标签: regex

考虑以下用于文本替换的正则表达式规则

$mystring = preg_replace('/'.$myitem.'[ab]/', "", $mystring);

这将取代$myitem $mystring中的空白字符,当且仅当后面跟ab

我的要求是不要用空白字符替换它,而是将其替换为:

如果遇到a,则

a;如果遇到b,则为b

我无法在两次迭代中完成:

$mystring = preg_replace('/'.$myitem.'a/', "a", $mystring);
$mystring = preg_replace('/'.$myitem.'b/', "b", $mystring);

因为第一次迭代也会对$mystring产生一些副作用,使得第二条规则在这种情况下无效。

有没有办法在单次迭代中进行这种条件替换?

针对回答进行了编辑

好的,我的问题过于简单了,但这是实际的正则规则

'(?:(?<=^|\s)(?=\S|$)|(?<=^|\S)(?=\s|$))'.$myitem.'(?:(?<=^|\s)(?=\S|$)|(?<=^|\S)(?=\s|$)) *([ab])'

现在在这种情况下,我如何计算反向引用数,因为我也看到了一些条件分组。

2 个答案:

答案 0 :(得分:4)

您可以在替换中捕获并使用backrefence:

$mystring = preg_replace('/'.$myitem.'([ab])/', '$1', $mystring);

答案 1 :(得分:2)

您可以捕获并替换:

$mystring = preg_replace('/'.$myitem.'([ab])/', "\1", $mystring);