Соединение регулярок с помощью I

188
03 ноября 2017, 11:37

Не понимаю, почему по отдельности работает, а если соединить, то работать не будет?

Надо удалить слова, в которых есть повторяющиеся буквы

echo preg_replace('#([a-z]+)\1[a-z]+#', '', 'wword word'); //работает
echo '<br>';
echo preg_replace('#[a-z]+([a-z]+)\1#', '', 'word wordd'); //работает
echo '<br>';
echo preg_replace('#(([a-z]+)\1([a-z]+)|[a-z]+([a-z]+)\1)#', '', 'wword word'); //не работает
Answer 1

Потому что первая группа в третьей регулярке это

([a-z]+)\1([a-z]+)|[a-z]+([a-z]+)\1

так как у вас там скобки вокруг всего выражения стоят.

<?php
echo preg_replace('#([a-z]+)\1[a-z]+#', '', 'wword word'); //работает
echo "\n";
echo preg_replace('#[a-z]+([a-z]+)\1#', '', 'word wordd'); //работает
echo "\n";
echo preg_replace('#([a-z]+)\1[a-z]+|[a-z]+([a-z]+)\2#', '', 'wword word'); //работает

Тест http://sandbox.onlinephpfunctions.com/code/0b8c2279e8deae138d53bebd43087d1456740475

Answer 2

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

(([a-z]+)\1([a-z]+)|[a-z]+([a-z]+)\1)
|| - #1    |              |
 | - #2    |              |
           | - #3         |
                          | - #4

Для удаления слов, в которых повторяются буквы, можно использовать регулярное выражение без группы альтернатив с помощью

echo preg_replace('#[a-z]*([a-z]+)\1[a-z]*#', '', 'wword ok wordd');
// =>  ok 
// С поддержкой Юникода
echo preg_replace('#\p{L}*(\p{L}+)\1\p{L}*#u', '', 'слослон из зоопарка');
// => из 

См. демо(https://ideone.com/HGl7k8).

Описание

  • [a-z]* - 0 и более букв (\p{L} найдет любую букву Юникода)
  • ([a-z]+) - захватывающая подмаска (группа) №1, 1 и более букв
  • \1 - обратная ссылка на текст в подмаске №1
  • [a-z]* - 0 и более букв

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

READ ALSO
Как правильно создать роуты для роутера в паттерне MVC?

Как правильно создать роуты для роутера в паттерне MVC?

У меня есть данные маршруты для класса Router:

166
Мониторинг выполнения скрипта

Мониторинг выполнения скрипта

ЗдравствуйтеСайт работает на php + mysql

175
php и вывод индекса массива

php и вывод индекса массива

Есть программа , в которой выводится индекс элемента массива , но почему-то место числа выводится ArrayКод:

177