Возможно ли замутить такое? (регулярное выражение)

12 3
djdiplomat
На сайте с 05.08.2009
Offline
136
1767

можно ли создать регулярное выражение для функции preg_replace, которое будет удалять подряд два идущих друг за другом одинаковых слова (число пробелов между ними произвольно), при наличии произвольного числа исключений.

К примеру слово "лесной" исключение.

Исходный текст:

идет пешеход пешеход по дороге лесной лесной и радуется радуется очень сильно.

должно остаться:

идет пешеход по дороге лесной лесной и радуется очень сильно.

Помогите плиз с регуляркой!

PS Альтернативное решение с использованием оператора if я знаю. Нужен другой вариант.

IL
На сайте с 20.04.2007
Offline
435
#1

см preg_replace_callback, а в вызываемой функции поместить сравнение с исключениями.

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
LEOnidUKG
На сайте с 25.11.2006
Offline
1731
#2
Нужен другой вариант.

Зачем?...........

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
L
На сайте с 07.12.2007
Offline
351
#3
djdiplomat:
Помогите плиз с регуляркой!

Это будет совершенно непрозрачная и неуправляемая регулярка с непредсказуемым временем выполнения.

Понять как она работатет и изменить в ней что-то - будет серьёзной проблемой и чревато поломкой головного мозга.

Как простой вариант - explode в массив по пробелам, пробежаться по массиву и вычистить дубли(пропустив нужные исключения), и сделать implode по пробелам.

Для обработки слов перед .,!? - предварительно разбить по предложениям.

Белый Ум
На сайте с 27.04.2009
Offline
240
#4
при наличии произвольного числа исключений

гы-гы а исключения тоже хотите в регулярку забить?

Напишите простейший скрипт-итератор. Регулярки тут не нужны.

Skype: shum_beliy
siv1987
На сайте с 02.04.2009
Offline
427
#5

Как-то так /([^\s]+\s)(\1)+/

RiDDi
На сайте с 06.06.2010
Offline
284
#6

/([^\s]+)[\s]+(?!лесной|быстро|пьяный)\1/



---------- Добавлено 10.04.2013 в 22:27 ----------

Ladycharm:
Это будет совершенно непрозрачная и неуправляемая регулярка с непредсказуемым временем выполнения.

Почему? :)

Ох, женщины :)

Вебмастер отдыхает на бережках морей. Заработок в интернете - дело техники.
L
На сайте с 07.12.2007
Offline
351
#7
RiDDi:
/([^\s]+)[\s]+(?!лесной|быстро|пьяный)\1/
Почему? :)

Проверьте на примере: 'бульон он для больной ой ведь здоровая я ясно?'

Слова бывают сложные: "мальчик-с-пальчик", "палочка-выручалочка"...

Непонятно, что считает ТС одинаковыми словами в примере: 'идет мальчик-с-пальчик пальчик в гипсе', и удовлетворяет ли результат работы регулярки ТЗ :)

djdiplomat
На сайте с 05.08.2009
Offline
136
#8
LEOnidUKG:
Зачем?...........

Ну задание такое.... =) Найти альтернативное решение... Вообще это из задачника....

Там задачки и по хлеще были. Типа, как поменять переменные а и б местами без использования ц. Ну это я нашел, там с исключающим или прикол. А тут вот пока еще нет...

ВОТ ТЕКСТ ЗАДАЧИ:


Используя регулярные выражения, составьте программу, которая будет искать подряд идущие слова в тексте и заменять их одним. При этом Вам необходимо предусмотреть возможность добавления исключений (слов, которые будут пропускаться программой в случае повторения)

Примечание: Использование оператора if запрещается.
Ladycharm:
Непонятно, что считает ТС одинаковыми словами в примере: 'идет мальчик-с-пальчик пальчик в гипсе', и удовлетворяет ли результат работы регулярки ТЗ :)

одинаковыми словами считаются лишь подряд идущие слова. (вот как в ворде если два раза подряд набрать одно и тоже слово, то второе ворд подчеркивает.) Вот тот же принцип.

Т.е под словом понимается последовательность букв и цифр разделенных между собой пробелами.

siv1987
На сайте с 02.04.2009
Offline
427
#9
djdiplomat:
Найти альтернативное решение...

Ну два альтернативных решений выше уже дали, вот еще одно немного улучшенное

find: /([^\s]+)\s+(?:\1(\s+|$|\.|,))+/

replace: $1$2

исключения юзать по варианту предложенному RiDDi.

IL
На сайте с 20.04.2007
Offline
435
#10
djdiplomat:
как поменять переменные а и б местами без использования ц

В некоторых языках это "задачей похлеще" назвать нельзя.. python, например:

a,b = b,a
djdiplomat:
Вообще это из задачника....

Что за задачник такой? :)

12 3

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