preg_replace在字符串中的相同单词

时间:2014-11-20 08:44:32

标签: php regex

字符串:这是文字:wall :: wall :: wall :: wall:more text

输出应为:这是文字:墙:更多文字

任务:减少单词:wall:仅为1。

我尝试了这两种想法,但没有奏效:

$post_message = preg_replace("/([\:wall:])+/", "\\1", $post_message);

$post_message = preg_replace('/:wall:/', '', $post_message, 1);

4 个答案:

答案 0 :(得分:1)

preg_replace函数中使用以下正则表达式。

<强>正则表达式:

(:wall:)(?:\s+:wall:)+

OR

(:wall:)(?:\s+\1)+

替换字符串:

$1

DEMO

<强>代码:

<?php
$str = "this is text :wall: :wall: :wall: :wall: more text";
echo preg_replace('~(:wall:)(?:\s+\1)+~', '$1', $str);
?>

<强>输出:

this is text :wall: more text

(:wall:)将文本:wall:捕获到一个组中。这可以通过组索引1来引用。因此,此(?:\s+\1)+匹配下面的一个或多个空格+ :wall:字符串。将匹配替换为组索引1中的字符将删除所有重复的:wall:字符串。

答案 1 :(得分:0)

(:wall:)(?=((?!\1).)*\1)

试试这个。empty string。见。演示。

http://regex101.com/r/lZ5mN8/62

答案 2 :(得分:0)

$str = 'this is text :wall: :wall: :wall: :wall: more text';
$post_message = preg_replace("#(:wall:\s+)+#i", '\1', $str);

答案 3 :(得分:0)

根据最佳解决方案:

我需要:

String1:这是文字:( :( :(更多文字

String2:这是文字:? :? :?更多文字

输出应该是:这是文字:(更多文字

输出应该是:这是文字:?更多文字

任务:减少笑脸:(只有1。

任务:减少笑脸:?只有1。

我尝试了这些,但没有工作:

$post_message = preg_replace('~(:()(?:\s+\1)+~', '$1', $post_message);

$post_message = preg_replace('~(:?)(?:\s+\1)+~', '$1', $post_message);

再次感谢。