Perl正規表現の罠と罠はずし その3
文字列を複数行として扱う修飾子「m」を付けると、改行文字による行区切りの後を行頭、前を行末と見なすので、行頭・行末アンカーを置き換えなくてもそのまま使える。
$text = "12345\nABCDEFG\n12345\n"; print '=' x 10 . '(1-0)' . '=' x 10 . "\n"; print $text; $text =~ s/^ABCDE/x/gm; print '=' x 10 . '(1-1)' . '=' x 10 . "\n"; print $text; $text = "12345\nABCDEFG\n12345\n"; print '=' x 10 . '(2-0)' . '=' x 10 . "\n"; print $text; $text =~ s/^1234/6789/gm; print '=' x 10 . '(2-1)' . '=' x 10 . "\n"; print $text; $text = "12345\nABCDEFG\n12345\n"; print '=' x 10 . '(3-0)' . '=' x 10 . "\n"; print $text; $text =~ s/EFG$/x/gm; print '=' x 10 . '(3-1)' . '=' x 10 . "\n"; print $text; $text = "12345\nABCDEFG\n12345\n"; print '=' x 10 . '(4-0)' . '=' x 10 . "\n"; print $text; $text =~ s/2345$/7890/gm; print '=' x 10 . '(4-1)' . '=' x 10 . "\n"; print $text;
実行結果
==========(1-0)========== 12345 ABCDEFG 12345 ==========(1-1)========== 12345 xFG 12345 ==========(2-0)========== 12345 ABCDEFG 12345 ==========(2-1)========== 67895 ABCDEFG 67895 ==========(3-0)========== 12345 ABCDEFG 12345 ==========(3-1)========== 12345 ABCDx 12345 ==========(4-0)========== 12345 ABCDEFG 12345 ==========(4-1)========== 17890 ABCDEFG 17890
改行が含まれていて、行頭・行末の認識が必要なら、最初からこっちを使ったほうがいいかも。