В таких языках, как PHP, регулярное выражение просто обычная строка, в комплекте с кавычками: "/regex/"
. С другой стороны, Perl имеет литералы регулярных выражений. Они непосредственно встроены в код, но все же нужны разделители.
В общем, это выглядит следующим образом:
$string =~ /regex/
Слеши являются разделителем по умолчанию. если слэши являются неудобным разделителем, вы можете выбрать любой другой (1) -just prefix regex с m
(для соответствия). Эти матчи эквивалентны:
$url =~ /http:\/\///;
$url =~ m/http:\/\///;
$url =~ m{http://};
Если вы хотите сохранить прекомпилированный регулярное выражение в переменной, вы можете использовать qr//
кавычки. Предпочитают их на простые строки, потому что qr//
регулярных выражения следуют тем же цитируя правила, как регулярные выражения (не двойной ускользает):
my $url_regex = qr~http://~;
$url =~ $url_regex;
Оператор =~
привязывать прилагает все усилиями, чтобы интерпретировать правую руку аргумент как регулярное выражение, так что вы могли бы даже использовать строки, в PHP, как мода:
"123\nab12" =~ "\\d\n\\w+"; # double escaping sucks, still matches
но уступает /\d\n\w+/
.
Таким образом, не представляется возможным, чтобы пропустить любой разделитель вообще:
# "=~" has higher precedence than "+".
# Establishing precedence is the *sole* task of the parens here
"112" =~ (1+2); # fails
"3" =~ (1+2); # matches
"112" =~ /1+2/; # matches
- Не используйте вопросительные знаки в качестве регулярных выражений разделителей, это матч только один раз.
Да? Какие? Этот код не является полным. Вы имели в виду регулярное выражение '/ {/' (которое работает)? – amon
теперь не perl, но возможно избежать его, потому что это метасимвол? '\ {' –
@ Вам нужно обернуть ваше регулярное выражение при оценке с помощью оператора ~ ~ в perl? – Rooster