6.14 前回パターンがマッチした箇所からマッチングを行う
前回パターンがマッチした箇所からマッチングを再開したい。これができれば、文字列からデータを連続して取り出すことができる。
/g修飾子、/c修飾子、\Gパターンアンカー、pos関数を組み合わせて使用する。
例1. /g修飾子を使って、文字列中にある全ての正の整数を検出する
while (/(\d+)/g) { print "Found number $1\n"; }
メタキャラクタ\Gは前回パターンマッチが終了した位置にマッチする。
例2. 数値の先頭に付加されている全ての空白文字を数字の0に置換する。
$n = " 49 here"; $n =~ s/\G /0/g; print $n; # => 0049 here
/c修飾子を指定すると、最後にマッチした箇所から続けてマッチングが行われる。
$_ = "The year 1752 lost 10 days on the 3rd of September"; while (/(\d+)/gc) { print "Found number $1\n"; } # /c修飾子により、最後にマッチした箇所から続けてマッチングが行われる if (/\G(\S+)/g) { print "Found $1 right after the last number.\n"; } # => Found Number 1752 # => Found Number 10 # => Found NUmber 3 # => Found rd after the last number.