2016-04-10 1 views
13

での表記は、私は、次の正規表現を説明する必要があります:\:?私のクラスのいずれかの正規表現

をB4 [0-9] {12}(:?[0-9] {3})\ B

それは数を選択することを理解する:4で始まるが、12桁の数字(0-9間のそれぞれ)に続いて、別の3桁の数字が続きます。

は、私が理解していないことはセミコロンで疑問符(?:...)。私はこれが何を意味するかを調べるために、オンラインで探してみましたが、私が見つけたリンクは、やや混乱しました。私は誰かが私に疑問符がこの例では何の迅速な基本的なアイデアを与える可能性が期待していました。

+0

は:非キャプチャグループを表すために使用されます。 を参照できます。http://stackoverflow.com/questions/3512471/what-is-a-non-capturing-group – firec

答えて

3

これは正規表現がではないことを意味します。はそうでない場合のように、親の中でマッチによってグループを作成します(通常、カッコでグループが作成されます)。

30

これは短いな答えになるだろう。

あなたが(?:)を使用する場合、それはgroupが一致しているが、非キャプチャグループバック参照すなわちのために捕獲されていないことを意味します。後で参照するためにメモリに格納されません。例えば

(34)5\1

この正規表現は、あなたが5し、再度34続い34を探していることを意味します。確かにあなたは34534としてそれを書くことができますが、時にはcaptured groupはあなたが手の前に予測することができなかった複雑なパターンです。

のでキャプチャグループにマッチしているものは何でもが再び登場しなければなりません。


バック参照

Regex101 demo for back-referencing

も、交換時に使用されます。例については

([A-Z]+)[0-9]+

この正規表現はmany数字が続くmany大文字を探します。そして、私はこの全体のパターンをちょう​​どによって置き換えたいと思っています。大文字です。

その後、私はバック参照最初捕獲基を表す\1を使用してパターン全体を置き換えます。

Regex101 demo for replacement

あなたはそれ故に(?:[A-Z]+)[0-9]+にこの意志もはやキャプチャそれを変更しないとした場合、バック参照することはできません。

Regex101 demo for non-capturing group

A live answer.

関連する問題