Не понимаю, почему по отдельности работает, а если соединить, то работать не будет?
Надо удалить слова, в которых есть повторяющиеся буквы
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 и более буквДемо регулярного выражения
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости