Не понимаю, почему по отдельности работает, а если соединить, то работать не будет?
Надо удалить слова, в которых есть повторяющиеся буквы
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'); //не работает
Потому что первая группа в третьей регулярке это
([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
Номерные захватывающие подмаски (группы) нумеруются в порядке их очереди в регулярном выражении, слева направо.
(([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 и более буквДемо регулярного выражения
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
У меня есть данные маршруты для класса Router:
Есть программа , в которой выводится индекс элемента массива , но почему-то место числа выводится ArrayКод: