Подскажите по регулярному выражению

12
M
На сайте с 20.08.2004
Offline
376
1242

Регулярное выражение

$text = preg_replace('#(.)\1{'.(3-1).',}#u','\1\1\1', $text);

Заменяет все повторяющиеся более 3х раз символы на 3 таких же символа.

Никак не могу добиться того что бы это срабатывало только с определенным набором символов, ну скажем буквами русского и латинского алфавита.

Буду признателен за подсказку.

отец сыночка, лапочки дочки и еще одного сыночка
Str01tel
На сайте с 27.12.2009
Offline
26
#1

что-то вроде этого, для латиницы

$text = preg_replace('#([a-zA-Z])\1{3,}#u','\1\1\1', $text);

для латиницы и кириллицы

$text = preg_replace('#([a-zA-Zа-яА-Я])\1{3,}#u','\1\1\1', $text);
M
На сайте с 20.08.2004
Offline
376
#2

спасибо, но это не работает.

$text = "АААААА аааааа 1111111...........,,,,,,,!!!!!????";

echo preg_replace('#(.)\1{'.(3-1).',}#u','\1\1\1', $text);
echo "<br>";
echo preg_replace('#([a-zA-Z]+)\1{'.(3-1).',}#u','\1\1\1', $text);
echo "<br>";
echo preg_replace('#([a-zA-Z])\1{3,}#u','\1\1\1', $text);
ААА ааа 111...,,,!!!???
АААААА аааааа 1111111...........,,,,,,,!!!!!????
АААААА аааааа 1111111...........,,,,,,,!!!!!????
Str01tel
На сайте с 27.12.2009
Offline
26
#3

хм, редактор справился на отлично с той регуляркой

вообщем вот эта должна работать на php

<?php
$text = "аааааааа ббббббббб вв zzzzzzzzz ????????? АААААААААААААААААААААА !!!!!!!!!!! ттттттт";
echo preg_replace('#([a-zа-я]){3,}#si','\1\1\1', $text);
ааа ббб вв zzz ????????? ААА !!!!!!!!!!! ттт
M
На сайте с 20.08.2004
Offline
376
#4
Str01tel:
хм, редактор справился на отлично с той регуляркой

расскажите подробней об этом пожалуйста.

#si

у меня юникод

Str01tel
На сайте с 27.12.2009
Offline
26
#5
Miracle:
расскажите подробней об этом пожалуйста.

для тестов пользовался Coda в MacOS

еще есть отличные онлайн сервисы например http://regexr.com?2sgg2

M
На сайте с 20.08.2004
Offline
376
#6

Может проще как то через исключения сделать, мне надо что бы регулярное выражение работало для всех симвлолов кроме цифр?!

Str01tel:
еще есть отличные онлайн сервисы например http://regexr.com?2sgg2

спасибо. но помоему там что то не то.

Miracle добавил 08.11.2010 в 09:36

preg_replace('#([a-zа-я\?\.]){3,}#ui','\1\1\1', $text); работает, но не срабатывает для запятых и восклицательных знаков

когда вставляю preg_replace('#([a-zа-я!,\?\.]){3,}#ui','\1\1\1', $text); удяляет все , и !

M
На сайте с 20.08.2004
Offline
376
#7
Str01tel:
$text = "аааааааа ббббббббб вв zzzzzzzzz ????????? АААААААААААААААААААААА !!!!!!!!!!! ттттттт";
echo preg_replace('#([a-zа-я]){3,}#si','\1\1\1', $text);

Тема с регуляркой более чем актуальна, то что написали вы совершенно не работает из текста

Заменяет все повторяющиеся более 3х раз символы на 3 таких же символа.
Никак не могу добиться того что бы это срабатывало только с определенным набором символов, ну скажем буквами русского и латинского алфавита.

Буду признателен за подсказку.

делает вот такой

Ттт еее яяя еее 3х ззз ыыы на 3 ххх же ааа.
ккк не ууу яяя ооо ооо бы ооо ооо ооо с ммм ммм ввв, ну ммм иии ооо и ооо ааа.
skAmZ
На сайте с 04.09.2009
Offline
122
#8
Miracle:
мне надо что бы регулярное выражение работало для всех симвлолов кроме цифр


$str='aaa bbbb cccccc ааааааа 99 444444 pp кккккк ооооо ммммм !!!!! ???????? ,,,,,,,,, .........';
echo preg_replace('!#([0-9]+)\s!', '\1', preg_replace('!(\S){3,}!', '\1\1\1 ', preg_replace('!([0-9])!', '#\1 ', $str)));
M
На сайте с 20.08.2004
Offline
376
#9

спасибо.

с текстом который ниже (у меня все в юникоде) ничего не вышло.

Заменяет все повторяющиеся более 3х раз символы на 3 таких же символа.
Никак не могу добиться того что бы это срабатывало только с определенным набором символов, ну скажем буквами русского и латинского алфавита.

Буду признателен за подсказку.

Miracle добавил 09.11.2010 в 11:50

на сколько я понимаю очень важен значек

#u
skAmZ
На сайте с 04.09.2009
Offline
122
#10

Видите ли в чем проблема… Если у вас текст в юникоде или просто даже utf, то русские символы представляются не в виде 1 символа а 2-х.

Поэтому Ваша задача не совсем корректная, ибо повторение русских символов является не повторением одного символа, а повторением группы символов.

Как вариант можно перевести вашу строку в windows-1251 и работать с ней, но тогда могут потеряться другие символы, которые не поддерживаются в windows-1251.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий