Reguläre Ausdrücke
Reguläre Ausdrücke Verwendung von regulären Ausdrücken in CONZEPT 16
Ein regulärer Ausdruck ist eine Zeichenkette, die eine Menge von Zeichenketten anhand syntaktischer Regeln bzw. Textmustern beschreibt. Mit regulären Ausdrücken lassen sich Texte und Zeichenketten nach definierten Mustern durchsuchen. Die syntaktischen Regeln sind in Metazeichen und Operatoren aufgeteilt.
In CONZEPT 16 können reguläre Ausdrücke im Assistenten , der Suchleiste im Editor und mit den Befehlen TextSearchRegEx () und StrFindRegEx () verwendet werden.
Metazeichen in regulären Ausdrücken
Folgende Metazeichen können in regulären Ausdrücken verwendet werden:
- Zeichen: Beschreibung
- \a: Findet das Zeichen BELL, \u0007
- \A: Findet etwas am Anfang des Suchtextes. Im Unterschied zu ^ findet \A nichts nach einem Zeilenumbruch innerhalb des Suchtextes.
- \b, außerhalb eines [Set]: Gilt als Treffer, wenn die aktuelle Position eine Wort-Grenze ist. Wort-Grenzen treten an den Übergängen zwischen Wort- (\w) und Nicht-Wort-Zeichen (\W) auf, wobei Kombinationsmarken ignoriert werden.
- \B: Gilt als Treffer, wenn die aktuelle Position keine Wort-Grenze ist.
- \cX: Findet ein control-X-Zeichen.
- \d: Findet ein beliebiges Zeichen mit der Unicode General Category von Nd (Nummer, Dezimalziffer.)
- \D: Findet ein beliebiges Zeichen, das keine Dezimalziffer ist.
- \e: Findet das Zeichen ESCAPE, \u001B.
- \E: Beendet eine mit \Q ... \E geschützte Zeichenfolge.
- \f: Findet das Zeichen FORM FEED, \u000C.
- \G: Gilt als Treffer, wenn die aktuelle Position am Ende des vorigen Treffers ist.
- \p{UNICODE PROPERTY NAME}: Findet ein beliebiges Zeichen mit der angegebenen Unicode-Eigenschaft.
- \P{UNICODE PROPERTY NAME}: Findet ein beliebiges Zeichen, das die angegebene Unicode-Eigenschaft nicht hat.
- \Q: Schützt alle folgenden Zeichen, bis \E folgt.
- \r: Findet das Zeichen CARRIAGE RETURN, \u000D.
- \s: Findet ein beliebiges Leerzeichen. Leerzeichen sind definiert als [\t\n\f\r\p{Z}].
- \S: Findet ein beliebiges Zeichen, das kein Leerzeichen ist.
- \t: Findet das Zeichen HORIZONTAL TABULATION, \u0009
- \uhhhh: Findet das Zeichen mit dem Hex-Wert hhhh
- \Uhhhhhhhh: Findet das Zeichen mit dem Hex-Wert hhhhhhhh. Es müssen exakt acht Hex-Zeichen angegeben werden, auch wenn der höchste Unicode-Codewert momentan erst \U0010ffff ist.
- \w: Findet ein Wort-Zeichen. Wort-Zeichen sind [\p{Ll} \p{Lu}\p{Lt}\p{Lo}\p{Nd}].
- \W: Findet ein Nicht-Wort-Zeichen.
- \x{hhhh}: Findet das Zeichen mit dem Hex-Wert hhhh. Ein bis sechs Hex-Zeichen können hierbei angegeben werden
- \xhh: Findet das Zeichen mit dem aus zwei Hex-Zeichen bestehenden Hex-Wert hh.
- \X: Findet einen Grapheme Cluster (also ein sichtbares Schriftzeichen nach Unicode-Definition).
- \z: Gilt als Treffer, wenn die aktuelle Position am Ende des Suchtextes ist
- \Z: Gilt als Treffer, wenn die aktuelle Position am Ende des Suchtextes ist, aber noch vor dem letzten Zeilenende, falls eines vorhanden ist
- \n: Rückbezug auf den Suche-Ausdruck. Übernimmt alles, was in der n. Suchgruppe gefunden wurde. n muss eine Ziffer > 1 und < der Gesamtanzahl der Gruppen im Pattern sein.
- \0ooo: Findet das Zeichen mit dem Oktal-Wert ooo. Es können ein bis drei Ziffern angegeben werden. Der höchste erlaubte Oktal-Wert ist \0377. Die führende Null wird benötigt, da sie die den Oktal-Wert von dem Rückbezug unterscheidet.
- [pattern]: Findet beliebige Zeichen des Sets. In dem Set können Zeichenklassen , gültige Zeichen (z. B. [abcdef]), sowie Zeichenbereiche (z. B. [0-9A-Za-z]) angegeben werden. Ein Set beschreibt ein Zeichen.
- .: Findet irgendein Zeichen
- ^: Findet etwas am Anfang einer Zeile
- $: Findet etwas am Ende einer Zeile
- ****: Schützt das folgende Zeichen. Die Zeichen, die geschützt werden müssen, damit sie als solche erkannt werden, sind: * ? + [ ( ) { } ^ $ | \ . /
Operatoren in regulären Ausdrücken
Folgende Operatoren können in regulären Ausdrücken verwendet werden:
- Operator: Beschreibung
- |: Alternative. A|B findet entweder A oder B.
- *****: Der voranstehende Ausdruck darf beliebig oft (auch keinmal) vorkommen. (Dies entspricht {0,})
- +: Der voranstehende Ausdruck muss mindestens einmal vorkommen, darf aber auch mehrfach vorkommen. (Dies entspricht {1,})
- ?: Der voranstehende Ausdruck ist optional, er kann einmal vorkommen, muss es aber nicht, d. h. der Ausdruck kommt null- oder einmal vor. (Dies entspricht {0,1})
- {n}: Der voranstehende Ausdruck muss exakt n-mal vorkommen.
- {n,}: Der voranstehende Ausdruck muss mindestens n-mal vorkommen.
- {n,m}: Der voranstehende Ausdruck muss mindestens n-mal und darf maximal m-mal vorkommen.
- *?: Findet 0 oder mehr Treffer, vorzugsweise möglichst wenige.
- +?: Findet 1 oder mehr Treffer, vorzugsweise möglichst wenige.
- ??: Findet 0 oder mehr Treffer, vorzugsweise möglichst 0.
- {n}?: Findet exakt n Treffer.
- {n,}?: Findet mindestens n Treffer, aber nicht mehr als nötig, damit der gesamte Reguläre Ausdruck passt.
- {n,m}?: Findet zwischen n und m Treffer, vorzugsweise möglichst wenige, aber nicht weniger als n.
- *+: Findet 0 oder mehr Treffer, vorzugsweise möglichst viele nach dem ersten Treffer, wobei nicht weitergesucht werden soll, wenn weniger gefunden wurden, selbst wenn der gesamte Reguläre Ausdruck dann nicht passt (Possessive Match).
- ++: Findet 1 oder mehr Treffer. Possessive match.
- ?+: Findet 0 oder 1 Treffer. Possessive match.
- {n}+: Findet exakt n Treffer.
- {n,}+: Findet mindestens n Treffer. Possessive Match.
- {n,m}+: Findet zwischen n und m Treffer. Possessive Match.
- (?: ... ): Nicht-gruppierende Klammern. Gruppiert die eingeschlossenen Ausdrücke, deren Suchergebnisse allerdings nicht weiter benutzt werden können. Arbeiten daher etwas schneller als Gruppenklammern.
- (?> .... ): »Atomic-Treffer«-Klammern. Nur der erste Treffer des Ausdrucks in der Klammer wird benutzt; wenn dadurch nicht der gesamte Reguläre Ausdruck gültig wird, sucht die Routine vor der Position des »(?>« weiter.
- (?# ... ): Kommentar (?# Kommentar ).
- (?= ... ): Vorausschau-Annahme. Wahr, wenn der Ausdruck in Klammern an der aktuellen Suchposition gültig ist, wobei die Suchposition nicht verändert wird.
- (?<= ...): Rückschau-Annahme. Wahr, wenn der Ausdruck in Klammern auf Text passt, der vor der aktuellen Suchposition liegt, wobei das letzte Zeichen des Suchtreffers das Zeichen direkt vor der aktuellen Suchposition sein muss. Die Suchposition wird nicht verändert. Die Länge der möglichen Treffertexte dieses Ausdrucks darf nicht unbegrenzt sein (also keine *- oder +-Operatoren verwenden.)
- (?<!... ): Negative Rückschau-Annahme. Wahr, wenn der Ausdruck in Klammern nicht auf Text passt, der vor der aktuellen Suchposition liegt, wobei das letzte Zeichen des Suchtreffers das Zeichen direkt vor der aktuellen Suchposition sein muss. Die Suchposition wird nicht verändert. Die Länge der möglichen Treffertexte dieses Ausdrucks dürfen nicht begrenzt werden (also keine *- oder +-Operatoren verwenden.)
- (?imx: ... ): Schalter-Einstellungen. Der in Klammern stehende Ausdruck wird mit den gesetzten Optionen geprüft.
- (?-imx: ... ): Schalter-Einstellungen. Der in Klammern stehende Ausdruck wird mit den nicht gesetzten Optionen geprüft.
- (?imx): Schalter-Einstellungen. Die angegebenen Optionen werden für folgende Ausdrücke eingeschaltet.
- (?-imx): Schalter-Einstellungen. Die angegebenen Optionen werden für folgende Ausdrücke ausgeschaltet.
Schalter-Einstellungen
- i: Bestimmt, ob Groß-/Kleinschreibung beachtet werden soll. Standardmäßig wird die Groß/Kleinschreibung beachtet. Wenn diese Option gesetzt ist, wird die Groß-/Kleinschreibung nicht mehr beachtet.
- m: Bestimmt das Verhalten der "$"- und "^" in einem Suchausdruck. Standardmäßig finden "$" und "^" nur am Anfang bzw. Ende vom Text den gesuchten Ausdruck. Wenn diese Option gesetzt ist, finden die Operatoren "$" und "^" am Anfang bzw. Ende jeder Zeile den Ausdruck. (Multiline)
- x: Ist diese Option gesetzt werden Leerzeichen im Suchausdruck ignoriert. Weiterhin können keine Kommentare (?# Comment) im Suchausdruck verwendet werden.
Beispiele für Schalter-Einstellungen
// Groß-/Kleinschreibung für das Wort "Herr" nicht beachten
'(?i:Herr) Mustermann'
// Sucht das Wort "Herr" am Anfang einer Zeile. Das Wort Hallo darf davor stehen.
'(?m)^(Hallo)? Herr'
// Leerzeichen ignorieren
'(?x)RecInsert | RecRead | RecReplace | RecDelete'
// Kommentare und Groß-/Kleinschreibung ignorieren, "Frank" auf Groß-/Kleinschreibung prüfen
'(?ix)hallo (?-i)Frank'
Beispiele für Zeichenklassen
- [:alnum:]: Alphanumerische Zeichen (:alpha: oder [:digit:])
- [:blank:]: Leerzeichen oder Tabulator
- [:digit:]: Ziffern 0 bis 9
- [:graph:]: Graphische Zeichen ([:alnum:] oder [:punct:])
- [:print:]: Druckbare Zeichen ([:alnum:], [:punct:] oder Leerzeichen)
- [:punct:]: Satzzeichen wie ! " # $ % & ' ( ) * + , - . / : ;
< = >? @ [ \ ] ^ _ ` { | } ~ - [:space:]: Whitespace wie Tabulator, Leerzeichen
- [:xdigit:]: Hexadezimale Ziffern 0 bis 9, A bis F, a bis f
Beispiele
// Entweder RecInsert oder RecReplace
'RecInsert|RecReplace'
// Nicht auskommentierte Aufrufe von Funktion der Prozedur SysFnc
'(?<!//|//[:space:])SysFnc:[:alnum:]*\('
// Eine hexadezimale Ziffer
'[:xdigit:]'
// entspricht auch
'[0-9A-Fa-f]'
// Dezimale und Hexadezimale Defines
':[:space:]*0x[:xdigit:]+|:[:space:]*[:digit:]+'
// entspricht auch
':\s*0x[:xdigit:]+|:\s*\d+'