Regex 条件正则表达式替换

Regex 条件正则表达式替换,regex,Regex,考虑以下用于文本替换的正则表达式规则 $mystring = preg_replace('/'.$myitem.'[ab]/', "", $mystring); 这将用$mystring中的空白字符替换$myitem,当且仅当其后跟a或b时 我的要求不是将其替换为空白字符,而是将其替换为: a如果遇到a或b如果遇到b 我无法在两次迭代中完成,如: $mystring = preg_replace('/'.$myitem.'a/', "a", $mystring); $mystring = pr

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

$mystring = preg_replace('/'.$myitem.'[ab]/', "", $mystring);
这将用
$mystring
中的空白字符替换
$myitem
,当且仅当其后跟
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])'

”(?:(?您可以在替换中捕获并使用反向引用:

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

您可以捕获并替换:

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

谢谢,但我把我的正则表达式规则简化了。我现在编辑了我的问题以包含实际的正则表达式。你能告诉我在这种情况下如何计算反向参考号吗?谢谢,但我把正则表达式规则简化了。我现在编辑了我的问题以包含实际的正则表达式。你能告诉我在这种情况下如何计算反向参考号吗?t他的正则表达式适用于全词替换,因为单词可能也包含特殊字符,因此简单的单词边界可能不起作用。我从这里借用了这条规则:在编辑问题之前查看您的输入/输出示例。没有这条规则,很难理解要求。在获得answ后更改问题也是不公平的呃。如果问题过于简单,那么你也可以问一个新问题。我已经给了你回答的学分。没有问题。谢谢谢谢,请不要误解我。我仍然会尝试回答你的新问题,因为我喜欢挑战正则表达式问题。