Простые шаблоны

В Perl шаблоны помешаются в оператор поиска по шаблону, который обычно выглядит как т/л вот пример простого шаблона:



Этот шаблон соответствует последовательности букв S-i-m-o-n. Но вот только где он ищет эту последовательность? Ранее вы узнали, что в Perl часто используется стандартная переменная $_. Так вот, поиск по шаблону происходит в переменной $_, если не будет указана другая переменная (об этом мы поговорим позже). Итак, предыдущий шаблон ишет последовательность символов S-i-m-o-n в скалярной переменной $_.


Если в переменной $_ найдена строка, соответствующая шаблону, оператор т// возвращает истинное значение. Поэтому обычно поиск по шаблону используют в условных выражениях, как показано ниже:



Внутри шаблона каждый символ соответствует самому себе, если только это не метасимвол. Большинство обычных символов (буквы и цифры) соответствуют сами себе. Метасимволы — это символы, изменяющие поведение шаблонов. Вот список метасимволов:



Их действие будет объяснено чуть позже. Если же в шаблоне вы хотите использовать метасимвол как литерал, необходимо перед ним поставить обратную косую черту, например: –


m/Я честно выиграл /; | $ в данном случае “$” не метасимвол, а просто знак доллара.


Оператор поиска по шаблону обычно имеет вид m//. Тем не менее в нем можно заменить символы косой черты на любой другой символ, как в следующем примере:



Подобная замена символов часто делается, если в шаблоне есть символы косой черты, что может привести к неправильному определению конца шаблона. Поэтому перед вложенным символом косой черты должен быть символ обратной косой черты, например:



Этот же пример можно переписать в более читабельном виде:



В операторе поиска по шаблону можно обойтись и без префикса m, если в качестве ограничителей шаблона используются символы косой черты. Так, вместо m/Cheetos/ можно написать /Cheetos/. Обычно, если не нужно заменять символ-ограничитель, так и поступают.


В регулярных выражениях можно использовать переменные. Встретив в регулярном выражении имя переменной, Perl сначала вычисляет значение этой переменной, а затем уже использует получившийся шаблон. Это позволяет создавать регулярные выражения на ходу. В приведенном ниже примере регулярное выражение, используемое в операторе if, считывается с клавиатуры:



Для обозначения регулярных выражений в руководстве и документации часто используются сокращения RE или regехр. Для ясности мы будем по-прежнему называть их регулярными выражениями.
Правила игры

Прежде чем применять регулярные выражения в Perl, сначала нужно узнать, как они используются. Этих правил немного. Все они возникли не на пустом месте, а имеют определенный смысл. Вот они.



  • Обычно поиск по шаблону в строке ведется слева направо.
  • Выражение, в котором задан шаблон, возвращает истинное значение (в любом контексте) тогда и только тогда, когда в строке найден текст, полностью соответствующий шаблону.
  • Поиск соответствия шаблону выполняется в строке слева направо. Таким образом, первым будет найден текст, расположенный ближе к началу строки. Однако это совсем не означает, что следующие соответствия шаблону найдены не будут. Хотя существуют и исключения…
  • Прежде всего программа пытается найти самую длинную строку, соответствующую шаблону. Обнаружив первое совпадение, Perl просматривает всю строку до конца в поиске более длинной фразы, соответствующей заданному шаблону. Для описания этого свойства регулярных выражений придуман специальный термин — “жадность” регулярных выражений.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: