字符串:这是文字:wall :: wall :: wall :: wall:more text
输出应为:这是文字:墙:更多文字
任务:减少单词:wall:仅为1。
我尝试了这两种想法,但没有奏效:
$post_message = preg_replace("/([\:wall:])+/", "\\1", $post_message);
$post_message = preg_replace('/:wall:/', '', $post_message, 1);
答案 0 :(得分:1)
在preg_replace
函数中使用以下正则表达式。
<强>正则表达式:强>
(:wall:)(?:\s+:wall:)+
OR
(:wall:)(?:\s+\1)+
替换字符串:
$1
<强>代码:强>
<?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)
答案 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);
再次感谢。