Мне нужно преобразовать любую букву, которая происходит дважды или более в одном слове, с одной буквой.
Например:
School -> Schol Google -> Gogle Gooooogle -> Gogle VooDoo -> Vodo
Я попробовал следующее, но застрял во втором параметре в eregi_replace.
$word = 'Goooogle'; $word2 = eregi_replace("([az]{2,})", "?", $word);
Если я использую \\\1
для замены?, Он будет отображать точное совпадение. Как сделать это единственной буквой?
Может ли кто-нибудь помочь? благодаря
См. Регулярное выражение для замены двух (или более) последовательных символов только одним?
Кстати: вы должны использовать функции preg_*
(PCRE) вместо устаревших функций ereg_*
(POSIX).
Ответ Ричарда Салая ведет правильный путь:
$word = 'Goooogle'; $word2 = preg_replace('/(\w)\1+/', '$1', $word);
Вы не только захватываете всю вещь (а не только первый символ), но {2,}
рематчаете [az] (а не исходное совпадение). Он должен работать, если вы используете:
$word2 = eregi_replace("(\w)\1+", "\\1", $word);
Какая обратная ссылка на исходный матч. Вы можете заменить \ w на [az], если хотите.
+ Требуется для вашего примера Goooogle (в любом случае для механизма регулярных выражений JS), но я не уверен, почему.
Помните, что вам нужно будет использовать флаг «global» («g»).
Попробуй это:
$string = "thhhhiiiissssss hasss sooo mannnny letterss"; $string = preg_replace('/([a-zA-Z])\1+/', '$1', $string);
Как это работает:
/ ... / # Marks the start and end of the expression. ([a-zA-Z]) # Match any single az character lowercase or uppercase. \1+ # One or more occurrence of the single character we matched previously. $1 \1+ # The same single character we matched previously.