我需要将一个单词中出现两次或更多次的任何字母转换为单个字母。
例如:
School -> Schol
Google -> Gogle
Gooooogle -> Gogle
VooDoo -> Vodo
我尝试了以下操作,但坚持使用eregi_replace中的第二个参数。
$word = 'Goooogle';
$word2 = eregi_replace("([a-z]{2,})", "?", $word);
如果我使用\\\1
替换?,则会显示完全匹配。
我怎么把它写成单个字母?
有人可以帮忙吗?感谢
答案 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);