time

Регулярные выражения: поиск с инверсией

regexp.png Понадобилось мне найти все слова в предложении, кроме определенных слов. Например, в предложении ‘Many modern computing systems provide wildcard characters in matching filenames from a file system.‘ найти все, кроме слов computing и matching.

Испытуемый текст: ‘Many modern computing systems provide wildcard characters in matching filenames from a file system.‘

Регулярное выражение: ‘/\\b(?!(?:computing|matching)\\b)w+\\b/’

Результат: перечень всех слов за исключением computing и matching.

где,

\\b – граница слова

w – набор символов [A-Za-z0-9_]

?: – несохраняющие скобки, т.е. все что внутри группирующих скобок не будет включено в результат

?! – поиск с инверсией, т.е. то, что внутри будет исключено из совпадения

Вообще комбинация ?! называется негативная опережающая проверка и относится к одному из четырех видов позиционных проверок:

Тип Регулярное
выражение
Успешна,
если подвыражение…
Позитивная ретроспективная проверка (?<=..) Может совпасть слева
Негативная ретроспективная проверка (?<!–..) Не может совпасть слева
Позитивная опережающая проверка (?=..) Может совпасть справа
Негативная опережающая проверка (?!..) Не может совпасть справа

Для проверки работы можно воспользоваться:

  • RegExr – online инструмент для проверки регулярных выражений.
  • rejex.heroku.com - еще один online отладчик regexp'ов.
  • strfriend.com - визуализатор регулярных выражений.
  • pythex.appspot.com

Расширение для FireFox Regular Expressions Tester

Полезный материл – RegexAdvice Forums – форум по регулярным выражениям.

Пока читал бестлер про регулярным выражениям – Дж. Фридл – Регулярные выражения узнал две интересные вещи:

  • по спецификации POSIX существует два диалекта регулярок BRE и ERE
  • две базовые технологии, на базе которых строится механизм регулярных выражений: НКА и ДКА

BRE (basic regular expressions) – базовые регулярные выражения

ERE (extened regular expressions) – расширенные регулярные выражения

НКА (недетерминированный конечный автомат) – механизм управляется регулярным выражением

ДКА (детерминированный конечный автомат) – механизм управляется текстом

Поддержка диалектами разных метасимволов

Метасимволы BRE ERE
Точка, ^, $, [..], [^..]
Произвольное число * *
Квантификаторы + и ? +?
Интервальный квантификатор {мин, макс} {мин, макс}
Группировка (..) (..)
Применение квантификаторов к скобкам
Обратные ссылки 1..9
Конструкция выбора

Краткая таблица сравнения ДКА и НКА

параметры ДКА НКА
поддержка обратных ссылок
сохранение текста в круглых скобках
быстрый поиск совпадений
быстрая компиляция
меньшие затраты памяти

blog comments powered by Disqus