2013-08-02 36 views
1

我需要在相同的三行中排列多个相同的字母(只有A-Z或a-z,而不是数字)。任何人都可以帮我一个模式字符串?替换多个相同的字母

实施例:

输入:NO MEK PUCES CUDAK AVVVVVVVVVVVVVVVVVVVVVVVVV VASMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

输出:NO MEK PUCES CUDAK AVVV VASMAAA

+0

您需要替换除3个字母以外的所有字母吗? – AmazingDreams

+0

[Regex删除重复的字母]的可能的重复(http://stackoverflow.com/questions/17885329/regex-to-remove-duplicate-letters) – NDM

回答

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 
+0

谢谢你,你是老板。 – Legionar

2

可以使用正则表达式与反向引用:

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

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

如果你想要一个以上的字符保留,比如你的例子表明,你可以使用以下命令:

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

如果需要限制的字符集,那么就由字符类换出. ,例如[a-zA-Z]

+1

这我知道,但它不正确。这将取代一切,只有一个。我只需要A-Z,a-z,并用三个相同的字母替换。 – Legionar

+0

是的,现在正确,也需要(。)改变为([A-Za-z]) – Legionar

+1

这就是我在最后一句中写的,是的。 – Joey