Регулярные выражения Perl и их применение


         

Преобразование ftp и http ссылок в теги HTML - часть 2


Эта запись соответствует последовательности имен, разделенных точками, или IP-адресу, она в том числе поглотит префикс www. Также учтено, что длина одного имени (от точки до точки) не может быть больше 63 символов. Обратите внимание на два обратных слэша перед точками. Подобная запись содержимого переменной (here doc) транслируется как строка в двойных кавычках. В таких строках обратный слэш является метасимволом.

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

По правде говоря, если бы мы пставили по одной обратной черте перед точками, то результат был бы тем же, потому что Perl игнорирует неизвестные эскейп-последовательности, такие, как \., т.к. точка в строках не является метасимволом, и оставляет обратную косую как она есть. Другое дело сочетания \$ и \@. Т.к. символы $ и @ в строках, ограниченных двойными кавычками, являются префиксами имен переменных, Perl перед ними удаляет обратную косую черту, которая маскирует эти метасимволы.

Для поддоменов запишем такой шаблон:

my $subdom='(?:(?>[A-Za-z0-9](?:[-A-Za-z0-9]{0,61}[A-Za-z0-9])?)\\.)+';

Здесь строка ограничена апострофами. В таких строках есть только два метасимвола - обратный слэш и апостроф. Поэтому, если мы хотим вставить в строку, ограниченную апострофами, эти символы, то их надо замаскировать обратным слэшем: \\ и \'. В результате мы вместо последовательности \\. получим во внутреннем представлении переменной $subdom последовательность \., что нам и нужно. Замечание относительно неизвестных эскейп-последовательностей для строк в двойных кавычках здесь также в силе.




Содержание  Назад  Вперед