2017-01-15 2 views
0

括弧で文字列を一致させようとしています。例えば正規表現パターンの中に角括弧を含む文字列変数を使用するにはどうすればよいですか?

my $foo = "debug_bus[0]"; 
my $bar = "debug_bus[0][12:0] = some_value;"; 

if ($bar =~ $foo) 
{ 
    print "Match\n"; 
} 
else 
{ 
    print "No Match\n"; 
} 

私は「マッチ」を期待するが、私は多分中括弧は「[0]」の問題を引き起こしていると信じて私をリード「いいえマッチ」を得続けますか?

+3

[Perl正規表現(perl演算子の文字を含む検索文字列として変数を使用)の可能な複製]](http://stackoverflow.com/questions/4616395/perl-regular-expression-using-variable-as-search- string-with-perl-operator-char) –

答えて

4

metacharacters

したがって、あなたが望む:

$bar =~ m/\Q$foo\E/; 

それとも:

$bar =~ /\Q$foo/; 

区切り文字が//の場合はmを省略することができ、実際にはは必要ありませんあなたのパターンには何もないので、この場合はになります。

4

ドキュメントquotemetaから

my $foo = quotemeta "debug_bus[0]"; 

my $foo = "debug_bus[0]"; 

を交換してください:

quotemetaのEXPR
はすべてASCII以外の "単語" の文字でEXPRの値を返します。バックスラッシュ。 quotemetaを使用せずに

[0]のみ0を含む、bracketed character classとして解釈し、その後だけ0と等価です。 (外)\Q...\E(内側)またはquotemetaを使用して、正規表現であなたが適切に( "引用")をエスケープする必要があり

関連する問題