Регулярные выражения
Задание флагов операции сопоставления с образцом осуществляется в самом образце. Флаги модифицируют выполнение операции и обычно являются частью синтаксиса самой операции. Расширенная конструкция (?imsx-imsx) позволяет задать флаги операции внутри самого образца. Эта возможность может быть полезной, например, в таблицах, когда разные элементы таблицы требуется по-разному сопоставлять с заданным образцом, например, некоторые элементы – с учетом регистра, другие – без учета. Допустимыми являются следующие флаги.
- i – поиск без учета регистра;
- dm – строка трактуется как мульти-строка, состоящая из нескольких строк, разделенных символом новой строки;
- s – строка трактуется как одна строка, в этом случае метасимволу "." соответствует любой одиночный символ, включая символ новой строки;
- х – разрешается использовать в образцах пробелы и комментарии. При использовании флага х пробелы в образцах игнорируются. Признаком комментария является символ #, как и в основном тексте Peri-программы. Пробелы позволяют сделать образец более читаемым.
Одна из литер i, m, s, x после знака "-" обозначает отмену соответствующего флага.
При помощи данной расширенной конструкции можно задать, например, следующий образец:
/(?ix) peri # игнорирование регистра при поиске/
Флаг i предписывает не учитывать регистр в операциях сопоставления с образцом, так что образцу будет соответствовать и слово peri, и слово Perl. Флаг х позволяет выделить слово "peri" пробелами и использовать в образце комментарий. И пробелы, и комментарий не будут учитываться в операции сопоставления с образцом.
Сводка результатов
Изложенное в данном разделе можно суммировать в виде набора правил, которыми следует руководствоваться при работе с регулярными выражениями.
- Любой одиночный символ, не являющийся метасимволом, представляет самого себя.
- Специальное значение метасимвола можно отменить, поместив перед ним специальный экранирующий метасимвол "\".
- Можно определить класс символов, заключив их в квадратные скобки. Если первым после открывающей скобки "[" является символ "^ ", то вся конструкция обозначает символы, не перечисленные в скобках. Внутри скобок два символа, соединенные знаком "-", определяют диапазон. Чтобы включить в состав класса символ "-", его следует поместить в начале или в конце списка, или экранировать при помощи символа "\".
- Символы можно задавать при помощи метапоследовательностей, состоящих из символа "\", за которым следует обычный символ или последовательность символов.
- Альтернативный выбор задается перечислением альтернативных вариантов, разделенных символом "|". Обычно вся конструкция при этом заключается в круглые скобки.
- Внутри регулярного выражения можно выделить подобразец, заключив его в круглые скобки. На и-ю конструкцию в скобках можно затем сослаться, используя нотацию \п внутри и $п – вне регулярного выражения.
В заключение раздела приведем в табл. 10.1 и 10.2 сводку метасимволов и метапоследовательностей, рассмотренных в данной главе.