0

index我在同时使用运算符和运算符时遇到 Perl 字符串匹配/搜索问题=~RT @zaynmalik: Big cover for @cosmopolitanuk ! Boys looking slick http://example.com/FcWA80HI我需要在文本文件中搜索字符串“ ”。

if($splitlines[1] =~ /RT @zaynmalik: Big cover for @cosmopolitanuk ! Boys looking slick http://example.com/FcWA80HI/){
     ## Do something ##
}

然而,因为 ' @' 是 Perl 中的一个特殊字符,我得到了编译错误。你能给我一个方法来做到这一点吗?我尝试将字符串保存到类似的变量$str中,但它不起作用(这是可以理解的)。

所以,这就是我现在正在做的,

$max_freq_tweet = 'RT @zaynmalik: Big cover for @cosmopolitanuk ! Boys looking slick http://example.com/FcWA80HI';
if($splitlines[1] =~ /\Q$max_freq_tweet\E/){
    print FILE5 "$splitlines2[1] \n";
}

但它似乎仍然没有工作。

4

3 回答 3

4

要么@通过反斜杠转义,要么使用单引号。

my $search_string = 'RT @zaynmalik: Big cover for @cosmopolitanuk ! Boys looking slick http://example.com/FcWA80HI';
# or:               "RT \@zaynmalik: Big cover for \@cosmopolitanuk ! Boys looking slick http://example.com/FcWA80HI"

if (-1 != index $str, $search_string) { do something }

如果您有一个字符串并想在正则表达式中使用它,则应确保通过以下方式保护其含义\Q...\E

if ($str =~ /\Q$search_string\E/) { do something }

\QUOT\E不会阻止数组插值,但该字符串中的任何字符都不会被视为特殊;没有它.,字符串中的任何字符都将匹配!

于 2013-01-16T06:56:26.617 回答
2

你需要@在你的正则表达式中转义。如$str =~ /RT \@.*:/.

编辑:您还可以/使用反斜杠 ( ) 转义斜线 ( \)。$str =~/RT \@.*: .* http:\/\/.*/.

于 2013-01-16T06:43:21.997 回答
-1

您需要使用前面的\(反斜杠)转义特殊字符。

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

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

于 2013-01-16T06:46:00.560 回答