明確にするために、一致させたい:
あぁあぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ …
_
これはPerlで動作します:
if ($exp =~ /^(a(?1)?b)$/)
これを理解するには、文字列が左右ではなく外側から伸びているように見てください。
ab
a(ab)b
aa(ab)bb
(?1)
括弧の外側のセットへの参照です。最後のケース (外側から内側へ) には after が必要です?
。何も残らず?
、前の式の 0 または 1 を意味します (したがって、基本的に基本ケースとして機能します)。
(?1)
Javaで同等のものは何ですか?と尋ねる同様の質問を投稿しました。今日、それ\\1
が最初の捕獲グループを指していることを知りました。だから、私はこれがうまくいくと思いました:
String pattern = "^(a(?:\\1)?b)$";
しかし、そうではありませんでした。誰かが理由を知っていますか?
注意:これを行うには、他にもより良い方法があることを知っています。これは厳密には教育上の問題です。のように、この特定の方法が機能しない理由と、それを修正する方法があるかどうかを知りたいです。