次の正規表現は、Notepad ++エディタで試してみると適切な結果が得られますが、以下のperlプログラムで試しても間違った結果が得られます。正解と説明をお願いします。preで始まりalで終わる単語に一致する正規表現
次のように私は私のパターンをテストするために使用されるファイルへのリンクは次のとおりです。
(http://sainikhil.me/stackoverflow/dictionaryWords.txt)
正規表現:(。*)^事前アル(\は、* S)$
のPerlプログラム:
use strict;
use warnings;
sub print_matches {
my $pattern = "^Pre(.*)al(\s*)\$";
my $file = shift;
open my $fp, $file;
while(my $line = <$fp>) {
if($line =~ m/$pattern/) {
print $line;
}
}
}
print_matches @ARGV;
ドル記号をエスケープしないでください –
本当ですか?私はそれを行う場合、私は次のエラーを取得します。 最後の$は、ex2.pl 8行目の文字列 のex2.pl 8行目の "="^Pre(。*)al(\ s *)$ ""に近い構文エラーです。 – saint1729
実際には、このOPのOPが正解です。 '$'は正規表現パターンではなく二重引用符で囲まれた文字列の中にあるため、エスケープする必要があります。 ''^Pre(。*)al(\ s *)\ $ "'(エスケープする必要があります)と '/^Pre(。*)al(\ s *)$ /'(エスケープしないでください。ちなみに、変数にパターンを普通の文字列として代入したい場合は、二重引用符の代わりに一重引用符を使用する場合は、 '$'をエスケープする必要はありません。 –