Доброго времени суток, сообщники!
Хотите немного ненормального программирования? :3 Нет, я не буду пытаться парсить html. Всё чуточку проще.
tl;dr: смотреть сюда, там понятны как регексп, так и задание плюс автоматически можно играться/проверять.
Подробнее.
Дано
Некоторый текст, в котором находится номер телефона в различных вариантах. Список:
Надо
Регекспами (PCRE) сматчить номер, но только в том случае, если он не московский и только если он не обёрнут в тег с определённым классом "foobar":
Упрощаем жизнь
Перед номером может быть всего два кода (812 или 495) или никакого вообще (пустой
считать питерским).
Обёртка находится всегда вплотную (достаточно искать строку класса в теге перед номером).
Усложняем бытие
Код города (и только он) может быть обёрнут в пустой span и/или быть в скобках.
В чём проблема?
Отрицание для группы (?!495) работает странно даже в паттернах типа /((?!495).*)/gui – не матчит четвёрку, но строку с ней считает найденной. Отсюда два вопроса:
1. Как сделать так, чтобы регексп вообще пропустил всю строку, где есть 495?
2. Почему регексп отрицает только первую цифру 4, а не все остальные?
3. Общие пожелания для улучшения регекспа тоже принимаются.
Сам регексп можно посмотреть и автоматически затестить вот здесь.
Спасибо и have fun!
RegexGuru wanted
programming
| пятница, 18 июля 2014