2016-08-16 1 views
0

私は他人が書いた正規表現を読むときに混乱します。私の質問はかっこです()はキャプチャグループにしか使用できませんでしたか?あるいは、正規表現をより洗練されたものにするために、特に長い正規表現の場合に、グループの論理的な操作集合を一緒に読むことができますか?カッコは正規表現マッチングのキャプチャグループにのみ使用されますか?

長い正規表現を書いた後に私は時々見るので、キャプチャグループの一致情報を知る必要がない場合でも追加のカッコを書きます。つまり、正規表現全体が一致するかどうかに関わらず、かっこが追加されます。

+1

しかし、あなただけのようにカッコ意味しています(' ... ')'と好きではありません '(:?' ... ')?!'、 '(' ... ')'、 '(?=' ... ')'と同様のものですね。それらは異なる特別な意味を持っているからです。 – Xufox

+0

@Xufox、私は '(...)'を意味します。質問して投票してくれてありがとう。あなたが私の元の質問に対する考えを持っているなら、それはすばらしいことになります。 –

+2

これらのグループは、量指定子とともに使用することができます。 '(?:ab)+'の繰り返しシーケンスの 'ab's。 '(ab)+'は同じことをしますが、さらにグループを捕捉します。私が個人的に正規表現を書くとき、私は不必要なグループを捕まえることを避けようとします。 – Xufox

答えて

1

括弧はグループ化に使用され、正規表現エンジンは括弧内のサブパターンを取得します。

あなたはこの構文を使用して非キャプチャグループを使用して内のテキストをキャプチャしたくない場合は、次の

(?:...) 

長く複雑な正規表現を処理している間にこれはまた、いくつかのメモリを節約します。

Non capturing groups


正規表現は我々が開始または数字で単語を選択している。この

^\w+|\d+$ 

であれば、広告()は慎重に配置する必要がどこかの基本的な&簡単な例の詳細を参照してください。入力の最後:

foo -a123 bar baz 123 

したがって、foo123と一致しています。

^(\w+|\d+)$ 

我々は単語または入力中の数字の周りの両方のアンカー^$の存在を主張しているとして、あなたのマッチが失敗します:あなたはこのようなブラケット()を配置する場合

。ブラケット付き

正しい正規表現は次のようになります。 `

(?:^\w+|\d+$) 
+1

ありがとうございましたanubhava、投票アップ。私はノンキャプチャグループを知っていて、それを使いました。私の質問は、私は正規表現でキャプチャされたサブパターンを気にせず、正規表現全体が一致するかどうかだけを気にするなら、長い正規表現を読みやすくするために '()'を使うのは正しいですか? –

+1

はい、正規表現の動作を変更しないように、 '()'やそれより優れた '(?:)'をより読みやすくするためには間違いなく使用できます。しかし、ちょうどあなたの正規表現に '()'を入れて、 '()'の前後に来るものを見て正規表現の全体的な意味が変わらないように注意してください。 – anubhava

+1

ありがとうanubhava、あなたの返信に投票してください。あなたは '()'の前後に来るものを見てどう変わるのではないのですか?私に例を教えてもらえますか?私は '()'が論理的な結果を変えるだろうということを知らない。 –

関連する問題