为什么我得到一个错误分配一个正则表达式字符串的变量?
下面是代码的示例:为什么我得到一个错误分配一个正则表达式字符串的变量?
my $testVar = "^.+|gg$";
即线是造成错误。它说美元符号应该逃脱,但我希望整条线匹配,所以我需要^
和$
字符。
对于Perl而言,我比较新,而我更愿意将我的正则表达式语句分配给易于使用的变量并且不知道如何。
如果要产生串
^.+|gg$
则必须使用下列文字
之一my $pat = '^.+|gg$';
my $pat = "^.+|gg\$";
注意$
必须用双引号字符串文本进行转义,因为$
标志着开始要用双引号字符串内插的变量。
但qr
更简单,它为您编译模式。
my $re = qr/^.+|gg$/;
下面是你应该如何做到这一点的例子:
$variable =~ /(find something)/;
如果你想分配给一个变量的模式,这里是你如何能做到这一点:
my $pattern = qr"patern";
my $content = "content";
my @results = $content =~ m/($pattern)/;
你”确实需要逃避每个特殊字符。
我明白你可以做到这一点我想将正则表达式匹配分配给一个变量,所以我不必把整个正则表达式字符串放在if语句中。 – 2014-09-21 00:38:24
@John Smith - 事实上,Perl没有像其他语言那样的“匹配”变量的概念。当涉及到正则表达式时,它总是使用全局变量。这是所有现代引擎的granddaddy,并且被深入集成到语言中,你可以真正在正则表达式中运行代码。 – sln 2014-09-21 00:51:27
Perl拥有'binding operator'' =〜'而不是'Matching'变量 - 正如你所说,它是一个更深入的koncept。 – cajwine 2014-09-21 07:34:57
你是怎么使用它的?我通常在'/ /'中有正则表达式。 – squiguy 2014-09-21 00:27:18
嗯,我没有使用它,因为它崩溃了,但我想这样做'if($ row =〜$ testVar){..}' – 2014-09-21 00:27:54
请参阅:https://stackoverflow.com/questions/4616395/perl-regular-expression-using-variable-as-search-string-with-perl-operator-char – squiguy 2014-09-21 00:28:13