
- •По курсу «Интернет-программирование»
- •Принципы работы регулярных выражений
- •История развития регулярных выражений
- •Принципы регулярных выражений
- •Конструкции шаблонов регулярных выражений
- •Классы символов (диапазоны)
- •Квантификаторы (повторения)
- •Граничные метасимволы
- •Перечисления
- •Группировки
- •Утверждения
- •Условные подвыражения
- •Реализация регулярных выражений в языках программирования
- •Примеры
Группировки
Группировка применяется для создания «подмасок» («подшаблонов») внутри шаблона, которые в дальнейшем могут быть использованы для замены или вывода во внешнюю переменную. Совпадения с группами нумеруются и поэтому могут быть доступны по номеру для замены или получения данных. В разных языках программирования обращение к найденным номерам групп — реализуется различно. Это может быть \1 (PHP) или $1 (Java)
Примеры замены с помощью групп:
шаблон ([1-3]+)0([4-6]+)
строка 0001230456000
Найден текст 1230456 позиция старта 3 позиция окончания 10
строка или шаблон замены $20$1
результат 0004560123000
шаблон ([1-3]+)0([4-6]+)
строка 0001230456000
Найден текст 1230456 позиция старта 3 позиция окончания 10
строка или шаблон замены $0
результат 0001230456000
Утверждения
Утверждения проверяют символы находящиеся до или после текущего символа. Утверждения делятся на позитивные и негативные. Позитивные:?= и ?<= принимают true при совпадении, а негативные ?! и <! при НЕ совпадении.
Утверждения Таблица 5
шаблон \w+(?=;)
(?=шаблон) |
Позитивный просмотр вперёд |
(?<=шаблон) |
Позитивный просмотр назад |
(?!шаблон) |
Негативный просмотр вперёд |
(?<!шаблон) |
Негативный просмотр назад |
строка abcd abcd; abcd
Найден текст abcd позиция старта 5 позиция окончания 9
шаблон test(?!success)
строка test test succeess testsuccess test
Найден текст test позиция старта 0 позиция окончания 4
Найден текст test позиция старта 5 позиция окончания 9
Найден текст test позиция старта 31 позиция окончания 35
Условные подвыражения
Условные подвыражения позволяют выполнять поиск совпадения в зависимости от выполнения некоторого условия, которое тоже может быть шаблоном
Условные подвыражения Таблица 6
шаблон (?<!Moscow\s)Zelenograd
(?(утверждение)то|иначе) |
Если утверждение возвращает true, то выполняется поиск по шаблону то, иначе по шаблону иначе |
(?(n)то|иначе) |
Если n-я группа вернула true, то выполняется поиск по шаблону то, иначе по шаблону иначе. |
строка The Miet is best vuz in Zelenograd. Address: Moscow Zelenograd
результат The Miet is best vuz in Moscow. Address: Moscow Zelenograd
Флаги
Флаги позволяют устанавливать модификацию, распространяющуюся на весть шаблон. Наиболее часто флаги по игнорировании больших и маленьких букв и применение
В некоторых языках программирования (JavaScript, PHP) флаги это часть самого шаблона, например, /((?=MIET)+)/i позволит найти все варианты совпадений совпадения, включающих слово МИЭТ не зависимо от регистра. Т.е. для строки содержащей миэт или Миэт тоже сработает. Для других языков, например Java, для организации регистронезависимого поиска нужно присвоить шаблону определенное свойство: Pattern pattern = Pattern.compile(strPattern,
Pattern.CASE_INSENSITIVE);.
Флаги Таблица 7
g |
Глобальный поиск (обрабатываются все совпадения с шаблоном поиска). |
i |
Регистронезависимый поиск |
m |
Многострочный поиск. |
s |
Текст трактуется как одна строка, в этом случае метасимволу . (точка) соответствует любой одиночный символ, включая символ новой строки; |