Rangfolge in regulären Ausdrücken
Was ist die Standard-Operatoren in Oracle ' s reguläre Ausdrücke, wenn Sie keine Klammern enthalten?
Beispielsweise gegeben
H|ha+
würde es bewertet werden, da H|h
und dann verkettet a
wie in ((H|h)a)
oder würde die H
abwechselnd mit ha
wie in (H|(ha))
?
Auch, wenn nicht der +
kick in, etc.?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Angesichts der Oracle doc:
Und nehmen Sie einen Blick auf die
|
Wert in die Tabelle:Plus Einnahme einen Blick auf die POSIX-doc:
Ich würde sagen, dass
H|ha+
wäre das gleiche wie(?:H|ha+)
.(H|ha+)
denn es gab keine erfassungsgruppeselect regexp_substr('adibcd', '(a|b)(c|d)') from dual;
gibt 'ad' (die andere Wahl wäre gewesen: 'bc', aber nach Prüfung für ac, die regexp-checks für die Anzeige, bevor Sie versuchen, bc).\d
oder\w
werden kannMit diesen Gruppen zu zeigen, die Reihenfolge der Auswertung der regex -
H|ha+
ist äquivalent zu den folgenden:Dies ist aufgrund der Vorrang-Regeln (siehe unten) angewendet werden, in der Reihenfolge von der höchsten Priorität (der niedrigsten Zahl) ein, um die niedrigste Priorität (die höchste nummerierte) ein:
Regel 5 →
(a+)
Die+
gruppiert ist, mit dera
weil dieser operator arbeitet auf die vorhergehenden Einzelzeichen, back-Referenz-Gruppe (a "gekennzeichneten sub-Ausdruck" im Oracle-Jargon), oder der Klammer-Ausdruck (Charakter-Klasse).Regel 6 →
(h(a+))
Dieh
ist dann verkettet mit der Gruppe in der vorherigen Schritt.Regel 8 →
(H|(h(a+)))
DieH
wird dann abwechselnd mit der Gruppe in der vorherigen Schritt.Vorrang-Tabelle aus Abschnitt 9.4.8 der POSIX-Dokumentation für reguläre Ausdrücke (es scheint nicht, eine offizielle Oracle-Tabelle):
Die Tabelle oben ist für Erweiterte Reguläre Ausdrücke. Für einfache Reguläre Ausdrücke finden Sie unter 9.3.7.
regex
- Paket implementiert eine Perl-ähnliche" regex-engine, fehlen ein paar features (z.B. bedingte Ausdrücke und Kommentare), aber einschließlich einige zusätzliche Angaben (z.B. possessive Quantoren und variable Länge, aber endlich, look-behind assertions). Weder Perl noch Java unterstützt, zusammentrag-Sequenzen oder character-äquivalenzen. Aber Perl nicht - Unterstützung "richtigen" POSIX Charakter-Klassen, die zwar Java unterstützt nur diese mit dem \operator p (mit ein paar Einschränkungen).