- 数量子は直前のパターンが繰り返される部分にマッチする正規表現
*は0回以上+は1回以上?は0回か1回{n}はちょうどn回{n,}は少なくともn回{n,m}はn回以上、m回以下
- 数量子の挙動にはgreedyとnon-greedyの2種類がある
- greedyは既定の挙動で、できるだけ多くの文字とマッチしようとする
- 例えば、
<.*>は<a></a>に対して<a></a>全体にマッチする
- 例えば、
- 数量子に
?を付けるとnon-greedyになり、最初のマッチで停止するようになる- 例えば、
<.*?>は<a></a>に対して<a>(と</a>)にマッチする - この
?は「0回か1回」の?とは別物
- 例えば、
- greedyは既定の挙動で、できるだけ多くの文字とマッチしようとする
- これらを使って、特定の中身を持つ括弧にマッチさせようとする場合、意図した通りにならない場合がある
- 別の括弧のペアとマッチしてしまう場合がある
- 例えば、
"(ab.*cd)"は(abc) (abcd) (bcd)に対して(abc) (abcd) (bcd)全体にマッチする - 例えば、
(ab.*?cd)"は(abc) (abcd) (bcd)に対して(abc) (abcd)にマッチする
- 例えば、
- この場合、区切り文字が中身に現れないことを明示する必要がある
"(ab[^)]*cd)"とすれば、(abc) (abcd) (bcd)に対して(abcd)にマッチする[^xyz]と書くと、x、y、z以外の1文字とマッチする
- 別の括弧のペアとマッチしてしまう場合がある
正規表現:繰り返し
Share this post on: