2016-04-10 18 views
13

für eine meiner Klassen muss ich den folgenden regulären Ausdruck beschreiben:: Notation in Regular Expression

\ b4 [0-9] {12} (?: [0-9] {3}) \ b

Ich verstehe, dass es eine Nummer auswählt, die: mit 4 beginnt, gefolgt von 12 Ziffern (jeweils zwischen 0-9), gefolgt von weiteren 3 Ziffern.

Was ich nicht verstehe, ist das Fragezeichen mit dem Semikolon (?: ....). Ich habe versucht, online zu schauen, um herauszufinden, was das bedeutet, aber die Links, die ich gefunden habe, waren etwas verwirrend; Ich hatte gehofft, dass mir jemand eine kurze Vorstellung davon geben könnte, was das Fragezeichen in diesem Beispiel macht.

+0

: verwendet wird, nicht Erfassungsgruppe zu bezeichnen. Sie können sich beziehen http://stackoverflow.com/questions/3512471/what-is-a-non-capturing-group – firec

Antwort

3

es eine ‚Nicht-Erfassung Gruppe‘ genannt, die die Regex bedeutet würde nicht eine Gruppe innerhalb der parenteses durch das Spiel machen, wie es sonst tun würde (in der Regel schafft eine Klammer eine Gruppe).

30

Dies wird kurz beantworten.

Wenn Sie (?:) verwenden, bedeutet dies, dass die group abgestimmt ist, ist jedoch nicht für die Rückverweise erfasst d.h Nicht-Erfassung Gruppe. Es wird nicht im Speicher gespeichert, um später darauf verwiesen zu werden.

Zum Beispiel:

(34)5\1

Diese Regex bedeutet, dass Sie für 34 von 5 und dann wieder 34 gefolgt suchen. Definitiv könnte man es als 34534 schreiben, aber manchmal ist das captured group ein komplexes Muster, das man vorher nicht vorhersagen konnte.

Also was auch immer wird von abgefangen werden, sollte die Erfassungsgruppe wieder erscheinen.

Regex101 demo for back-referencing


Back-Referenzierung auch während Ersatz verwendet wird.

Beispiel:

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

Diese Regex für many Großbuchstaben gefolgt von many Ziffern aussehen wird. Und ich möchte dieses ganze Muster nur durch gefundene Großbuchstaben ersetzen.

Dann würde ich ganze Muster ersetzen durch \1 verwendet, die für die Rückverweise erste erfassten Gruppe steht.

Regex101 demo for replacement

Wenn Sie (?:[A-Z]+)[0-9]+ ändern, um diese dann nicht mehr Capture es und kann daher nicht zurück verwiesen werden.

Regex101 demo for non-capturing group

A live answer.