替换多个相同的字母

时间:2013-08-02 12:40:25

标签: php regex

我需要在相同的三行中预先放置多个相同的字母(只有A-Z或a-z,而不是数字)。任何人都可以用模式字符串帮助我吗?

示例:

  

输入:没有MEK PUCES CUDAK AVVVVVVVVVVVVVVVVVVVVVVVVV VASMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

     

输出:没有MEK PUCES CUDAK AVVV VASMAAA

2 个答案:

答案 0 :(得分:6)

使用群组(([A-Za-z]))和反向引用(\1)。

$text = "NO MEK PUCES CUDAK AVVVVVVVVVVVVVVVVVVVVVVVVV VASMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";    
echo preg_replace('/([A-Za-z])\1{3,}/', "$1$1$1", $text);
# => NO MEK PUCES CUDAK AVVV VASMAAA

答案 1 :(得分:2)

您可以使用带反向引用的正则表达式:

preg_replace('/(.)\1+/', '$1', $str);

(.)匹配任何字符并将其放入捕获组。 \1是对同一组的引用,+限定了之前可能出现一次或多次的令牌。因此,这将只替换一个至少两个相同字符的任何运行。

如果您希望保留多个字符,就像您的示例所示,您可以使用以下内容:

preg_replace('/(.)\1{2,}/', '$1$1$1', $str);

如果您需要限制字符集,则只需将.替换为字符类,例如[a-zA-Z]