Perlでマルチライン正規表現を行う方法については、多くの質問があります。ほとんどの人は、ドットマッチを改行にするスイッチs
について言及しています。しかし、私は正確なフレーズ(パターンではない)と一致させたいので、改行がどこになるのか分かりません。ですから問題は:は.
と一致するのではなく、改行を無視できますか?ドットのないPerl正規表現マルチラインマッチ
MWE:
$pattern = "Match this exact phrase across newlines";
$text1 = "Match\nthis exact\nphrase across newlines";
$text2 = "Match this\nexact phra\nse across\nnewlines";
$text3 = "Keep any newlines\nMatch this exact\nphrase across newlines\noutside\nof the match";
$text1 =~ s/$pattern/replacement text/s;
$text2 =~ s/$pattern/replacement text/s;
$text3 =~ s/$pattern/replacement text/s;
print "$text1\n---\n$text2\n---\n$text3\n";
私は、パターンスペースの代わりに("Match.this.exact.phrase"
)にドットを置くことができますが、それは第二の例では動作しません。前処理としてすべての改行を削除できますが、3番目の例のように、一致の一部ではない改行を保持したいと思います。
所望の出力:
replacement text
---
replacement text
---
Keep any newlines
replacement text
outside
of the match
ほとんどの場合、改行をスペースとして扱います。それでは、あなたがそれを無視したいという時があります。いずれかをするのは簡単です。両方をすることは不可能です。 – ikegami