Java 6パターンのドキュメントから:
特別な構成 (非キャプチャ)
(?:
X)
X、非キャプチャ グループとして…</p>
(?>
X)
X、独立した非キャプチャ グループとして
(?:X)
との(?>X)
違いは何ですか? この文脈で独立とはどういう意味ですか?
これは、グループ化がアトミックであることを意味し、一致したグループのバックトラッキング情報を破棄します。したがって、この表現は所有格です。そうすることが正規表現全体として成功する唯一の方法であっても、後退しません。一致を保証するために、バックトラッキングを介して正規表現の他の要素と協力しないという意味で、それは「独立」しています。
がある場合foo(?>(co)*)co
、それは決して一致しません。これが役立つ実用的な例があると確信しています。O'Reilly の本を試してみてください。
(?>X?) は (?:X)?+ に等しく、(?>X*) は (?:X)*+ に等しく、(?>X+) は (?:X)++ に等しい。
編集:
上記の「構文」
は、 (?>X?)
equals (?:X)?+
、(?>X*)
equals (?:X)*+
、(?>X+)
equalsを意味します(?:X)++
。
X が非キャプチャ グループでなければならないという事実を取り除けば、前述の同等性は次のようになります。
(?>X?)
等しいX?+
、(?>X*)
等しいX*+
、(?>X+)
等しいX++
。