我将我的第一个内容字符串用单引号括起来以简化我的要求。它没有包含在我的代码中。
'{
# "ERROR" : [
# "generic error message"
# ]
# }' =~ {
看起来这应该是正确的,因为我只是检查第一个表达式是否有左括号,但它的评估结果为假。
在像 PHP 这样的语言中,正则表达式只是一个普通的字符串,带有引号:"/regex/"
. 另一方面,Perl 具有正则表达式文字。这些直接嵌入到代码中,但仍然需要分隔符。
一般来说,这看起来像:
$string =~ /regex/
斜杠是默认分隔符。如果斜杠是不方便的分隔符,您可以选择任何其他(1) — 只需在正则表达式前面加上m
(for match)。这些匹配是等效的:
$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
尝试这个:
'your string' =~ /\{/
如图所示,您的语法无效,因为{
它不是正则表达式。为了解决这个问题,我将它包装在默认的正则表达式字符中以获得/{/
,然后转义{
(导致/\{/
),因为它是正则表达式语法的元字符。(对于正则表达式x{a,b}
意味着x
应该至少a
和最多重复b
。)