我在使用index
和=~
运算符时遇到Perl字符串匹配/搜索问题。我需要在文本文件中搜索字符串“RT @zaynmalik: Big cover for @cosmopolitanuk ! Boys looking slick http://t.co/FcWA80HI
”。
if($ splitlines [1] =〜/ RT @zaynmalik:@cosmopolitanuk的大封面!看起来光滑的男孩http://t.co/FcWA80HI/){ ##做一点事## }
但是,因为'@
'是Perl中的特殊字符,所以我收到了编译错误。你能建议我这样做的方法吗?我尝试将字符串保存到$str
之类的变量,但它不起作用(这是可以理解的)。
提前谢谢你:)
编辑:所以,这就是我现在正在做的事情,
$max_freq_tweet = 'RT @zaynmalik: Big cover for @cosmopolitanuk ! Boys looking slick http://t.co/FcWA80HI';
if($splitlines[1] =~ /\Q$max_freq_tweet\E/){
print FILE5 "$splitlines2[1] \n";
}
但它似乎仍然不起作用。
答案 0 :(得分:4)
通过反斜杠转义@
,或使用单引号。
my $search_string = 'RT @zaynmalik: Big cover for @cosmopolitanuk ! Boys looking slick http://t.co/FcWA80HI';
# or: "RT \@zaynmalik: Big cover for \@cosmopolitanuk ! Boys looking slick http://t.co/FcWA80HI"
if (-1 != index $str, $search_string) { do something }
如果你有一个字符串并想在正则表达式中使用它,你应该确保通过\Q...\E
保护其含义:
if ($str =~ /\Q$search_string\E/) { do something }
此\QUOT\E
不会阻止数组插值,但该字符串中的字符不会被视为特殊字符;没有它,字符串中的.
将匹配任何字符!
答案 1 :(得分:2)
您需要在正则表达式中转义@
。与$str =~ /RT \@.*:/
中一样。
编辑:您还使用反斜杠(/
)转义斜杠(\
)。 $str =~/RT \@.*: .* http:\/\/.*/
。
答案 2 :(得分:-1)
您需要使用前面的\
来转义特殊字符这不仅适用于@,也适用于其他字符。
为了安全起见,您可以逃避任何非字母字符。