Сокращенная запись символьных классов

Некоторые символьные классы встречаются так часто, что для них были созданы \ специальные сокращения. Например, символьный класс для обозначения любой цифры [0-9] может быть записан в виде \d. Таким образом, приведенный ранее шаблон /HAL-[0-9]+/ можно записать в виде /HAL-\d+/. Сокращение \w обозначает так называемый «символ слова»: [A-Za-z0-9_]. Если ваши «слова» состоят исключительно из обычных букв, цифр и символов подчеркивания, вам этого будет достаточно. У большинства разработчиков слова состоят из обычных букв, дефисов и апострофов, поэтому мы бы предпочли изменить это определение «слова». На момент написания книги разработчики Perl работали над этой проблемой, но решение пока не готово. Следовательно, этот символьный класс должен использоваться только тогда, когда вам достаточно обычных букв, цифр и символов подчеркивания.

Конечно, \w не совпадает со «словом», а только с одним символом «слова». Но для совпадения с целым словом можно воспользоваться удобным модификатором +. Шаблон вида /fred \w+barney/ совпадет со словом fred, за которым следует пробел, затем некоторое «слово», еще один пробел и barney. Иначе говоря, он совпадет в том случае, если между fred и barney находится еще одно слово, отделенное от них одиночными пробелами.


Как вы, возможно, заметили из предыдущего примера, для определения пропусков между словами тоже хотелось бы иметь более гибкие средства. Сокращенная запись \s хорошо подходит для идентификации пропусков; она эквивалентна [\f\t\n\r ].

Иначе говоря, это то же самое, что символьный класс из пяти символов: подачи страницы, табуляции, новой строки, возврата курсора и собственно пробела. Все эти символы всего лишь смещают текущую позицию печати; чернила или тонер при их выводе не используются. Но по аналогии с уже рассмотренными сокращениями \s совпадает только с одним символом из класса, поэтому для описания пропусков произвольной длины (в том числе и нулевой) обычно используется запись \s*, а для пропусков из одного и более символов – запись \s+. (Более того, \s почти не встречается без одного из указанных квантификаторов.) Для человека все пропуски внешне ничем не отличаются, а эта сокращенная запись позволяет работать с ними на общем уровне. В Perl 5.10 появились новые символьные классы для определения пропусков. Сокращение \h совпадает только с горизонтальными пропусками (табуляцией и пробелом); оно эквивалентно символьному классу [\t ]. Сокращение \v совпадает только с вертикальными пропусками, или [\f\n\r]. Сокращение \R совпадает с любыми разрывами строк; другими словами, вам не нужно думать о том, в какой операционной системе работает ваша программа и что в ней считается разрывом строки; \R во всем разберется за вас.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Perl на эту тему:
Альтернатива
Группировка в шаблонах
Инвертированные сокращения
О метасимволах
Простые квантификаторы

Вернуться в раздел: Perl / 6. В мире регулярных выражений