考虑以下用于文本替换的正则表达式规则
$mystring = preg_replace('/'.$myitem.'[ab]/', "", $mystring);
这将取代$myitem
$mystring
中的空白字符,当且仅当后面跟a
或b
。
我的要求是不要用空白字符替换它,而是将其替换为:
如果遇到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])'
现在在这种情况下,我如何计算反向引用数,因为我也看到了一些条件分组。
答案 0 :(得分:4)
您可以在替换中捕获并使用backrefence:
$mystring = preg_replace('/'.$myitem.'([ab])/', '$1', $mystring);
答案 1 :(得分:2)
您可以捕获并替换:
$mystring = preg_replace('/'.$myitem.'([ab])/', "\1", $mystring);