前提・実現したいこと
オンラインの無料学習サイトで正規表現を学習しました
そこで最近、teratailで質問文にある質問を解いて、BAと答えあわせをして遊んでいます
その中で「こちら」の質問を解いていた際の疑問です
質問、回答に書かれている正規表現の動作確認は
「Online regex tester and debugger: PHP, PCRE, Python, Golang and JavaScript」
で行っています
発生している問題・エラーメッセージ
上記リンク先の質問でBAとなっている回答には、このように書いてありました
(\d|\d\d|[01]\d\d|2[0-4]\d|25[0-5])
は左から試行され 1 とマッチして終了するからです。
そこで、まずこの正規表現の行末側の動作を試してみました
すると、括弧内に書かれている\d
にマッチした直後に、括弧内のORを抜けるような、動作をしています
よって「マッチした文字があった場合は、すぐにカッコ内のその他OR条件を無視してカッコを抜ける」という結論を出しました
後続のOR条件に書かれており、成立するはずの.(\d\d)
と.([01]\d\d)
が無視されていることからも、この結論は、正しいと思っていました
次に、この状態で先頭の条件の動作を見てみました
「(\d).
が成立するため、その時点でカッコ内のほかの条件を無視しカッコを抜ける」と思っていたのですが、そうではなく、成立する条件の後ろに書かれた|([01]\d\d).
にマッチし、カッコ内を抜けていました
これはおかしくないのでしょうか?
(\d).
は確かに成立するはずです
なのに、なぜそれを無視して最後にマッチする条件を見たのでしょうか?
何か見落としている所があれば教えて頂きたいです
よろしくお願いします
回答4件
あなたの回答
tips
プレビュー