如何将双/多个字母替换为单个字母?

时间:2009-04-29 09:10:59

标签: php regex

我需要将一个单词中出现两次或更多次的任何字母转换为单个字母。

例如:

School -> Schol
Google -> Gogle
Gooooogle -> Gogle
VooDoo -> Vodo

我尝试了以下操作,但坚持使用eregi_replace中的第二个参数。

$word = 'Goooogle';
$word2 = eregi_replace("([a-z]{2,})", "?", $word);

如果我使用\\\1替换?,则会显示完全匹配。 我怎么把它写成单个字母?

有人可以帮忙吗?感谢

3 个答案:

答案 0 :(得分:8)

请参阅regular expression to replace two (or more) consecutive characters by only one?

顺便说一句:你应该使用preg_*(PCRE)函数而不是弃用的ereg_*函数(POSIX)。

Richard Szalay的回答是正确的:

$word = 'Goooogle';
$word2 = preg_replace('/(\w)\1+/', '$1', $word);

答案 1 :(得分:2)

您不仅捕获整个事物(而不仅仅是第一个字符),而且{2,}重新匹配[a-z](不是原始匹配)。如果你使用它,它应该工作:

$word2 = eregi_replace("(\w)\1+", "\\1", $word);

哪个反向引用原始匹配。如果您愿意,可以用[a-z]替换\ w。

你的Goooogle示例需要+(无论如何,对于JS正则表达式引擎),但我不确定原因。

请记住,您需要使用“全局”标志(“g”)。

答案 2 :(得分:1)

试试这个:

IEnumerable<Something>

这是如何运作的:

$string = "thhhhiiiissssss hasss sooo mannnny letterss";
$string = preg_replace('/([a-zA-Z])\1+/', '$1', $string);