【发布时间】:2017-03-04 22:50:22
【问题描述】:
我正在尝试编写一个删除字符串中连续重复单词的函数。保留正则表达式找到的任何匹配项至关重要。也就是说……
一条非常非常非常脏的狗
应该变成……
一条很脏的狗
我有一个似乎运行良好的正则表达式 (based on this post)
(\b\S+\b)(($|\s+)\1)+
但是我不确定如何使用 preg_replace (或者是否有更好的功能)来实现这一点。现在我让它删除所有匹配的重复单词,而不会留下一个完整的单词副本。我可以解析变量或特殊指令以保持匹配吗?
我现在有这个...
$string=preg_replace('/(\b\S+\b)(($|\s+)\1)+/', '', $string);
【问题讨论】:
-
请注意,在交替中使用
$是没有意义的,因为$\1永远不会匹配(您甚至不使用多行修饰符。
标签: php regex preg-replace