【发布时间】:2009-02-08 13:10:24
【问题描述】:
我需要关于这个 sn-p 的建议
$text = preg_replace('|(A.*)?A(.*)C|', '$1foo$2bar', $text);
这将匹配“AB ABC D”中的ABC,并将其替换为“AB fooBbar D”;正如你所看到的,这也与开头的“AB”部分匹配,我必须在替换字符串中用 $1 重复它,以免丢失它。
这是获得这种结果的最佳方式吗?
是否有这样的标志 X
$text = preg_replace('|A(.*)C|X', 'foo$1bar', $text);
产生相同的结果?
我希望我已经清楚了
谢谢!
编辑:将 A、B、C 视为任意字符的原子字符串,它们也可以包含空格
另外,给出的示例实际上是错误的,因为它只匹配“ABC ABC”中的第二个“ABC”。
EDIT2:对不起,我可能对问题的解释很糟糕。关键是我想匹配 whatever 在两个 A、C 字符串之间,这样匹配中就没有子字符串 A
再次感谢
【问题讨论】:
-
下一次,你应该想出一个真实的例子。 :-) 那些虚构的“ABC”示例并不理想(如您所见)。
-
“A AABCC C”的期望输出应该是什么?
-
@NoWhereMan:你能解释一下为什么简单的 preg_replace('|A(B)C|', 'foo$1bar', $text) 不起作用吗?
-
@Tomalak:是的,你是对的,我很抱歉@Zach:A AABCC C 应该返回“A AfooBbarC C”或“A AfooBBCC bar”
-
@Zach: B 可能包含 A
标签: php regex preg-replace