PERL: БИБЛИОТЕКА ПРОГРАММИСТА


PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 171


«Если поиск по шаблону — такая потрясающая и мощная штука, — спросите вы, — то почему же эта глава не содержит сотни рецептов по применению регу­лярных выражений?» Да, регулярные выражения обеспечивают естественное решение многих проблем, связанных с числами, строками, датами, Web-документа­ми, почтовыми адресами и буквально всем, что встречается в этой книге. В дру­гих главах поиск по шаблону применяется свыше 100 раз. А в этой главе в основ­ном представлены те рецепты, в которых шаблоны являются частью вопроса, а не ответа.

Обширная и тщательно проработанная поддержка регулярных выражений в Perl означает, что в вашем распоряжении оказываются не только те средства, которые не встречаются ни в одном другом языке, но и принципиально новые возможнос­ти их использования. Программисты, недавно познакомившиеся с Perl, часто ищут в нем функции поиска и подстановки:

1 Точнее, регулярные выражения в классическом смысле не содержат обратных ссылок, присутствую­щих в шаблонах Perl.


180   Глава 6 • Поиск по шаблону

match(  $строка    $шаблон)

subst(  $строка    $шаблон,   $замена)

Однако поиск и подстановка — настолько распространенные задачи, что они заслуживают собственного синтаксиса'

$meadow =~ m/sheep/,     # Истинно    если $meadow содержит    sheep Smeadow '" m/sheep/      # Истинно    если $meadow не содержит    sheep $meadow =~ s/old/new    # Заменить в $meadow    old    на    new

Поиск по шаблону даже в упрощенном виде не похож на обычные строковые сравнения. Он больше похож на поиск строк с применением универсальных сим­волов-мутантов, к тому же накачанных допингом. Без специального «якоря» по­зиция, в которой ищется совпадение, свободно перемещается по всей строке. Допустим, если вы захотите найти слово ovine или ovmes и воспользуетесь выра­жением $meadow =~  /ovine/, то в каждой из следующих строк произойдет лож­ное совпадение-Fine bovmes demand fine toreadors Muskoxen are a polar ovibovine species Groovmess went out of fashion decades ago




- Начало -  - Назад -  - Вперед -