Не понимаю, почему захватило abea? ведь по идеи должно находить только цельное слово
echo preg_replace('#(ab)+#', '!', 'ab abab abab abababab abea');
должно было вывести только ! ! ! ! abea
а выводит ! ! ! ! !ea
Чтобы найти целое слово, состоящее из ab
, используйте границы слова \b
:
echo preg_replace('#\b(?:ab)+\b#', '!', 'ab abab abab abababab abea');
^^ ^^
// => ! ! ! ! abea
См. PHP-демо
Подробности
\b
- начальная граница слова (перед текущей позицией может быть начало строки или цифра/буква/знак подчёркивания)(?:ab)+
- одно или более повторений последовательности букв ab
((?:...)
— незахватывающая группа, используемая только для группирования символов/шаблонов)\b
- конечная граница слова (после текущей позиции может быть конец строки или цифра/буква/знак подчёркивания)Используйте опережающую отрицательную проверку:
echo preg_replace('~(ab)+(?!ea)~', '!', 'ab abab abab abababab abea');
// Вывод : ! ! ! ! abea
Виртуальный выделенный сервер (VDS) становится отличным выбором
Установил по отдельности пакеты LAMP'aПроблема в авторизации в PHPMyAdmin
Нужно отправить POST-запрос банку для авторизацииЗапрос отправляю CURL, но возвращается 404 код
Здравствуйте, требуется помощь в написание регулярки для PHP preg_match, нужно вытащить весь текст вместе с тегами (<table>), которые имеют определенный...