web-dev-qa-db-ja.com

囲まれているものをキャプチャせずに、正規表現でORを使用できますか?

私は rubular.com を使用して正規表現を構築していますが、そのドキュメントでは次のことを説明しています。

(...)   Capture everything enclosed
(a|b)   a or b

どうすればOR式を使用できますか?たとえば、「ac」または「bc」のいずれかをキャプチャしたい場合、正規表現を使用できません

(a|b)(c)

右?それ以来、あるグループでは「a」または「b」、別のグループでは「c」をキャプチャしますが、同じではありません。キャプチャした結果をフィルタリングできることは知っていますが、それはもっと手間がかかるようです...

明らかな何かが欠けていますか?それが適切な場合は、Javaでこれを使用しています。

93
goggin13

正規表現の実装に応じて、構文(?:…)でいわゆる非キャプチャグループを使用できます。

((?:a|b)c)

ここで(?:a|b)はグループですが、その一致を参照することはできません。そのため、acまたはbcである((?:a|b)c)の一致のみを参照できます。

146
Gumbo

実装にそれがある場合、非キャプチャー括弧を使用できます。

(?:a|b)
21

ルーブルでも括弧を使用することはなく、|の優先度は低くなります。たとえば、 a | bcはcccと一致しません

1
msw