Unix (\n) 改行を含む複数行の文字列を処理しています。
一部の行は「A、a」(つまり、大文字、カンマ、スペース、小文字) の形式を持っており、文字列からそれらを削除したいと考えています。
正規表現の置換でこれを達成できますが、理解できない謎があります:
"[AZ]" と "[az]" を使用する正規表現は、通常モードと複数行モードの両方で機能します。
"\p{Lu}" と "\p{Ll}" を使用する正規表現は機能しますが、通常モードでのみ機能し、複数行モードでは機能しません。
これらの成功のそれぞれ:
$all =~ s/\n\K *[A-Z], [a-z]\n//g; # 1
$all =~ s/^ *[A-Z], [a-z]\n//mg; # 2
$all =~ s/\n\K *\p{Lu}, \p{Ll}\n//g; # 3
しかし、これは失敗します:
$all =~ s/^ *\p{Lu}, \p{Ll}\n//mg; # 4
/m スイッチが正規表現の "^" の意味を変更することを期待していましたが、他には何もありませんでした。したがって、ステートメント 4 は、ステートメント 1、2、および 3 と同様に機能すると予想しました。ステートメント 2 は、複数行の構文が問題ないことを示しているようで、ステートメント 3 は、Unicode 文字のプロパティが期待どおりに一致していることを示しているようです。これらを組み合わせると、ステートメント 4 が機能することが期待されます。
Tom Christensen の回答を見てきました。Why does modern Perl avoid UTF-8 by default? 、しかし、複数行の正規表現の一致については何も表示されず、他の場所で答えも見つかりませんでした。