2011-06-22 20 views
1

$ currentLineに$ currentSearchが存在するかどうかを調べるにはperl正規表現が必要です。 チェックには、$ currentLineに "Load"キーワードが含まれている必要があります。Perl正規表現のスラッシュ変数

$currentLine = Load DNA/3/44.com/index.html .....(3) 

TO

試合

$currentSearch = DNA/3/44.com/index.html 

私はこれを試みたが、それもこれが

動作しません...

if($currentLine[$k] =~ m/Load\s+$currentSearch[$i]\s+\.+\\(d+\)/) 

EDIT に一致していません

if($currentLine[$k] =~ m/$currentSearch[$i]/) 
+0

投稿したときにcurrentSearchとcurrentLine変数を定義する場合は、配列の括弧を取り除く必要があります。これは、文字列(および$ kも同様です)の配列ではありません。実際にcurrentSearchとcurrentLineを配列として定義している場合は、定義を投稿してください。 –

答えて

3

私はあなたの問題を使用していないから来ると思われる:

use strict; 
use warnings; 

スクリプトで

はここで働くスクリプトです。

まず、最初の2つのステートメントの文字列$currentSearch$currentLineには、引用符がありません。それはおそらくタイプミスですが、それは奇妙に見えます。

第2に、ifステートメントでは、スカラーではなく配列として参照します。これが別のタイプミスではないとすれば、それはあなたの問題の原因かもしれません。 $currentSearchおよび$currentSearch[$i]は、2つの全く異なる変数を参照しています。

警告と厳密な宣言なしでは、宣言されていない変数と定義されていない変数を2つ使用しても、間違ったことの兆候はありません。実際に

この:

perl -e 'if ($foo[0]=~ /$bar[1]/) { print "sure, why not?" }' 

は、両方の変数@foo@barが完全に空であっても、実際に成功した試合になるだろう、との文字列を出力します。 strictwarningsとすると、クラッシュしてやり直す必要があります。

とにかく、これは動作します:あなたは、検索文字列内のすべてのメタ文字を持っている場合は、それが、その場合にはあなたが検索文字列にquotemetaに投げることを試みることができ、エラーを検出することは困難引き起こす可能性があります

my $cs = "DNA/3/44.com/index.html"; 
my $cl = "Load DNA/3/44.com/index.html .....(3)"; 

if ($cl =~ /Load\s+$cs[\s\.]+\((\d+)\)/) { 
    print "Yes: $1\n"; 
} else { print "Nope!" } 

3

あなたはエラーがあります。「d」文字ではなく数字をキャッチするには、d文字をエスケープする必要があります。また、バックスラッシュが多すぎます(最初の括弧が欠けています)。

$currentSearch = "DNA/3/44.com/index.html"; 


$currentLine = "Load DNA/3/44.com/index.html .....(3)"; 


if($currentLine =~ /Load\s+$currentSearch\s+\.+\(\d+\)/) { 
    print "matched\n"; 
} else { 
    print "no match\n"; 
} 
+0

".....(3)"に一致する必要はありません。 '$ currentSearch'で止めてください。 –

0
if ($currentLine =~ /Load\s+\Q$currentSearch\E/) { ... }