Понадобилось мне найти все слова в предложении, кроме определенных слов. Например, в предложении ‘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_]
?: – несохраняющие скобки, т.е. все что внутри группирующих скобок не будет включено в результат
?! – поиск с инверсией, т.е. то, что внутри будет исключено из совпадения
Вообще комбинация ?! называется негативная опережающая проверка и относится к одному из четырех видов позиционных проверок:
Тип | Регулярное выражение |
Успешна, если подвыражение… |
---|---|---|
Позитивная ретроспективная проверка | (?<=..) | Может совпасть слева |
Негативная ретроспективная проверка | (?<!–..) | Не может совпасть слева |
Позитивная опережающая проверка | (?=..) | Может совпасть справа |
Негативная опережающая проверка | (?!..) | Не может совпасть справа |
Для проверки работы можно воспользоваться:
Расширение для FireFox Regular Expressions Tester
Полезный материл – RegexAdvice Forums – форум по регулярным выражениям.
Пока читал бестлер про регулярным выражениям – Дж. Фридл – Регулярные выражения узнал две интересные вещи:
BRE (basic regular expressions) – базовые регулярные выражения
ERE (extened regular expressions) – расширенные регулярные выражения
НКА (недетерминированный конечный автомат) – механизм управляется регулярным выражением
ДКА (детерминированный конечный автомат) – механизм управляется текстом
Поддержка диалектами разных метасимволов
Метасимволы | BRE | ERE |
---|---|---|
Точка, ^, $, [..], [^..] | ||
Произвольное число | * | * |
Квантификаторы + и ? | +? | |
Интервальный квантификатор | {мин, макс} | {мин, макс} |
Группировка | (..) | (..) |
Применение квантификаторов к скобкам | ||
Обратные ссылки | 1..9 | |
Конструкция выбора |
Краткая таблица сравнения ДКА и НКА
параметры | ДКА | НКА |
---|---|---|
поддержка обратных ссылок | ||
сохранение текста в круглых скобках | ||
быстрый поиск совпадений | ||
быстрая компиляция | ||
меньшие затраты памяти |