删除字符串中连续的重复单词
Removing consecutive duplicate words in a string
我正在尝试编写一个函数来删除字符串中连续的重复单词。保留正则表达式找到的任何匹配项至关重要。换句话说...
A very very very dirty dog
应该变成...
A very dirty dog
我有一个似乎运行良好的正则表达式(based on this post)
(\b\S+\b)(($|\s+))+
但是我不确定如何使用 preg_replace(或者如果有更好的函数)来实现它。现在,我让它删除了所有匹配的重复单词,而没有完整保留该单词的一个副本。我可以解析变量或特殊指令以保持匹配吗?
我目前有这个...
$string=preg_replace('/(\b\S+\b)(($|\s+))+/', '', $string);
您可以使用像 \b(\S+)(?:\s+\b)+
这样的正则表达式并替换为 </code>:</p>
<pre><code>$string=preg_replace('/\b(\S+)(?:\s+\b)+/i', '', $string);
详情:
\b(\S+)
- 第 1 组捕获一个或多个以单词边界开头的非空白符号(也许 \b(\w+)
更适合这里)
(?:\s+\b)+
- 1 个或多个序列:
\s+
- 1 个或多个空格
\b
- 存储在第 1 组缓冲区中的值的反向引用(该值必须是一个完整的单词)
替换模式是 </code>,替换后向引用引用存储在第 1 组缓冲区中的值。</p>
<p>请注意,<code>/i
不区分大小写修饰符将使 </code> 不区分大小写,而 <code>I have a dog Dog DOG
将导致 I have a dog
。
<?php
$text ='one one, two three, two';
$result_text = preg_replace("/\b(\w+)\s+\1\b/i", "", $text);
echo "Result Text: ".$result_text; //one, two three, two
?>
试试这个。它应该 return 一份完好无损。
我正在尝试编写一个函数来删除字符串中连续的重复单词。保留正则表达式找到的任何匹配项至关重要。换句话说...
A very very very dirty dog
应该变成...
A very dirty dog
我有一个似乎运行良好的正则表达式(based on this post)
(\b\S+\b)(($|\s+))+
但是我不确定如何使用 preg_replace(或者如果有更好的函数)来实现它。现在,我让它删除了所有匹配的重复单词,而没有完整保留该单词的一个副本。我可以解析变量或特殊指令以保持匹配吗?
我目前有这个...
$string=preg_replace('/(\b\S+\b)(($|\s+))+/', '', $string);
您可以使用像 \b(\S+)(?:\s+\b)+
这样的正则表达式并替换为 </code>:</p>
<pre><code>$string=preg_replace('/\b(\S+)(?:\s+\b)+/i', '', $string);
详情:
\b(\S+)
- 第 1 组捕获一个或多个以单词边界开头的非空白符号(也许\b(\w+)
更适合这里)(?:\s+\b)+
- 1 个或多个序列:\s+
- 1 个或多个空格\b
- 存储在第 1 组缓冲区中的值的反向引用(该值必须是一个完整的单词)
替换模式是 </code>,替换后向引用引用存储在第 1 组缓冲区中的值。</p>
<p>请注意,<code>/i
不区分大小写修饰符将使 </code> 不区分大小写,而 <code>I have a dog Dog DOG
将导致 I have a dog
。
<?php
$text ='one one, two three, two';
$result_text = preg_replace("/\b(\w+)\s+\1\b/i", "", $text);
echo "Result Text: ".$result_text; //one, two three, two
?>
试试这个。它应该 return 一份完好无损。