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 に答える