PHP 替换句子中连续出现的字符
PHP Replace consecutive occurrence of characters in sentence
如果超过三个,我想替换每个 WORD 中的所有连续字符(三个是最可能的德语,两个是英语,所以我知道输出示例在语法上是错误的)。
示例输入:
Hellooooo Louis, whaaaaaat's up pal?
预期输出:
Hellooo Louis, whaaat's up pal?
我尝试更改:
preg_replace('/(\w)+/', '', $word);
到
preg_replace('/(\w)+/', '', $word);
然而,它没有输出任何东西。
这里有一个方法:
preg_replace('/((\w))+/', '', $word);
您可以使用以下正则表达式:
((\w){2})+
见demo
替换为</code>。</p>
<p><a href="https://ideone.com/mLz1Oq" rel="nofollow">IDEONE</a>:</p>
<pre><code>$re = "#((\w)\2{2})\2+#";
$str = "Hellooooo Louis, whaaaaaat's up pal?";
$subst = "";
$result = preg_replace($re, $subst, $str);
echo $result;
输出:
Hellooo Louis, whaaat's up pal?
解释:
我们用 (\w)
捕获符号 - 它是第 2 组值。然后,我们检查它后面是否跟有 {2}
的相同字符恰好 2 次,并将其捕获到第 1 组。然后,我们将任何更多相同的后续字符与
反向引用匹配。
也可以用\K
重置之后换成空的,效率高一点:
(\w)\K+
如果超过三个,我想替换每个 WORD 中的所有连续字符(三个是最可能的德语,两个是英语,所以我知道输出示例在语法上是错误的)。
示例输入:
Hellooooo Louis, whaaaaaat's up pal?
预期输出:
Hellooo Louis, whaaat's up pal?
我尝试更改:
preg_replace('/(\w)+/', '', $word);
到
preg_replace('/(\w)+/', '', $word);
然而,它没有输出任何东西。
这里有一个方法:
preg_replace('/((\w))+/', '', $word);
您可以使用以下正则表达式:
((\w){2})+
见demo
替换为</code>。</p>
<p><a href="https://ideone.com/mLz1Oq" rel="nofollow">IDEONE</a>:</p>
<pre><code>$re = "#((\w)\2{2})\2+#";
$str = "Hellooooo Louis, whaaaaaat's up pal?";
$subst = "";
$result = preg_replace($re, $subst, $str);
echo $result;
输出:
Hellooo Louis, whaaat's up pal?
解释:
我们用 (\w)
捕获符号 - 它是第 2 组值。然后,我们检查它后面是否跟有 {2}
的相同字符恰好 2 次,并将其捕获到第 1 组。然后,我们将任何更多相同的后续字符与 反向引用匹配。
也可以用\K
重置之后换成空的,效率高一点:
(\w)\K+