Если внутри шаблона применяется группировка (круглые скобки), то номер подстроки группы обозначается как "\цифра". Заметьте, что за шаблоном в пределах выражения или блока эти группы обозначаются как "$цифра". Кроме этого существуют дополнительные переменные:
$+ | - обозначает последнее совпадение | $& | - все совпадение | $` | - все до совпадения | $" | - все после совпадения |
Пример:
$s = "Один 1 два 2 и три 3"; if ($s =~ /(\d+)\D+(\d+)/) { print "$1\n"; # Результат "1" print "$2\n"; # "2" print "$+\n"; # "2" print "$&\n"; # "1 два 2" print "$`\n"; # "Один " print "$"\n"; # " и три 3" }
Perl версии 5 содержит дополнительные конструкции шаблонов:
(?#комментарий) | - комментарий в теле шаблона. | (?:шаблон) | - группировка как и "( )", но без обратной ссылки | (?=шаблон) | - "заглядывание" вперед. Например /\w+(?=\t)/ соответствует слову, за которым идет табуляция,но символ "\t" не включается в pезультат. |
Пример:
$s = "1+2-3*4"; if ($s =~ /(\d)(?=-)/) # Найти цифру за которой стоит "-" { print "$1\n"; # Результат "2" } else { print "ошибка поиска\n";}
(?!шаблон) - "заглядывание" вперед по отрицанию.
Пример:
$s = "1+2-3*4"; if ($s =~ /(\d)(?!\+)/) # Найти цифру за которой не стоит "+" { print "$1\n"; # Результат "2" } else { print "ошибка поиска\n";}
(?ismx)- "внутренние" модификаторы. Удобно применять в шаблонах, где например нужно внутри шаблона указать модификатор.
1 2 3 4
8 8 8
| |