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

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
Конструкция выбора

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

параметры ДКА НКА
поддержка обратных ссылок
сохранение текста в круглых скобках
быстрый поиск совпадений
быстрая компиляция
меньшие затраты памяти
Цитата
Электронный мозг будет думать за нас точно так же, как электрический стул за нас умирает.
Станислав Ежи Лец
Категории
Архив