поиск слов цельных слов

216
22 октября 2017, 23:16

Не понимаю, почему захватило abea? ведь по идеи должно находить только цельное слово

echo preg_replace('#(ab)+#', '!', 'ab abab abab abababab abea');

должно было вывести только ! ! ! ! abea

а выводит ! ! ! ! !ea

Answer 1

Чтобы найти целое слово, состоящее из ab, используйте границы слова \b:

echo preg_replace('#\b(?:ab)+\b#', '!', 'ab abab abab abababab abea');
                    ^^       ^^
// => ! ! ! ! abea

См. PHP-демо

Подробности

  • \b - начальная граница слова (перед текущей позицией может быть начало строки или цифра/буква/знак подчёркивания)
  • (?:ab)+ - одно или более повторений последовательности букв ab ((?:...) — незахватывающая группа, используемая только для группирования символов/шаблонов)
  • \b - конечная граница слова (после текущей позиции может быть конец строки или цифра/буква/знак подчёркивания)
Answer 2

Используйте опережающую отрицательную проверку:

echo preg_replace('~(ab)+(?!ea)~', '!', 'ab abab abab abababab abea');
// Вывод : ! ! ! ! abea
READ ALSO
PHPExcel как сформировать файл

PHPExcel как сформировать файл

в чем может быть ошибка?данные не записываются

220
Авторизация root'а в PMA на Ubuntu 16.04 под LAMP

Авторизация root'а в PMA на Ubuntu 16.04 под LAMP

Установил по отдельности пакеты LAMP'aПроблема в авторизации в PHPMyAdmin

223
POST запрос CURL, возвращает 404

POST запрос CURL, возвращает 404

Нужно отправить POST-запрос банку для авторизацииЗапрос отправляю CURL, но возвращается 404 код

296
Регулярка php preg_match table + class

Регулярка php preg_match table + class

Здравствуйте, требуется помощь в написание регулярки для PHP preg_match, нужно вытащить весь текст вместе с тегами (<table>), которые имеют определенный...

234