regexp » proft.com.ua [Блог о Web, IT, life]

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

614 Программирование Комментариев нет

Понадобилось мне найти все слова в предложении, кроме определенных слов. Например, в предложении ‘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 инструмент для проверки регулярных выражений
Расширением для FireFox Regular Expressions Tester

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

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

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

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

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

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

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

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

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

Дж. Фридл – Регулярные выражения

350 Чтиво Один комментарий

Название: Регулярные выражения. 2-е
Автор: Дж. Фридл
Дата издание: 2003
Страниц: 464

Содержание:

Глава 1. Знакомство с регулярными выражениями
Глава 2. Дополнительные примеры
Глава 3. Регулярные выражения: диалекты и возможности
Глава 4. Механика обработки регулярных выражении
Глава 5, Практические приемы построения регулярных выражений.
Глава 6. Построение эффективных регулярных выражений.
Глава 7, Perl
Глава 8. Java
Глава 9.NET


Powered by WordPress