Perl字符串匹配

时间:2013-01-16 06:41:08

标签: string perl substring

我在使用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";

}

但它似乎仍然不起作用。

3 个答案:

答案 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)

您需要使用前面的\

来转义特殊字符

这不仅适用于@,也适用于其他字符。

为了安全起见,您可以逃避任何非字母字符。