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