# Referenz Regulärer Ausdrücke

Reguläre Ausdrücke sind eine leistungsstarke Möglichkeit, Muster für Such- und Übereinstimmungsvorgänge zu definieren. Beyond Compare ermöglicht Ihnen die Verwendung von regulären Ausdrücken beim Suchen durch Text sowie bei der Spezifizierung von Regeln zur Textklassifizierung. Bei der Unterstützung hinsichtlich regulärer Ausdrücke durch Beyond Compare handelt es sich um eine Syntaxuntermenge der Perl-Kompatiblen Regulären Ausdrücke (PCRE = Perl Compatible Regular Expressions). Reguläre Ausdrücke können ein komplexes Themengebiet sein, und es gibt über sie einige hervorragende Werke. Eines dieser Werke ist ein Buch mit dem Titel Mastering Regular Expressions. Ein weiteres ausgezeichnetes Werk ist A Tao of Regular Expressions von Steve Mansour, welches hier zu finden ist: www.scootersoftware.com/RegEx.html Ein regulärer Ausdruck wird aus zwei Arten von Zeichen zusammengestellt: normale Zeichen und Metazeichen. Bei einer Übereinstimmungsprüfung übernehmen die Metazeichen ganz bestimmte Aufgaben zur Steuerung, und zwar wie die Übereinstimmung gemacht wird, und als Jokerzeichen (Wildcards). Normale Zeichen stehen immer für sich selbst. Um Übereinstimmung mit Metazeichen herzustellen, müssen diese durch Escape-Sequenzen dargestellt werden, indem ein umgekehrter Schrägstrich (Backslash) "\" vorangestellt wird. Es gibt mehrere Arten von Metazeichen, die im Folgenden erklärt sind. Metazeichen - Escape-Sequenzen
Escape-Sequenz | Bedeutung
\xnn | Zeichen mit dem hexadezimalen Code nn
\x{nnnn} | Zeichen mit dem hexadezimalen Code nnnn
\x{F000} | Zeichen mit einem Null-Wert
\t | Tab (0x09)
\f | Formfeed (0x0C) (Zeilenvorschub)
\a | Bell (0x07) (Akust. Signal)
\e | Escape (0x1B)
Metazeichen - Vordefinierte Klassen Vordefinierte Zeichenklassen stimmen mit einer bestimmten Untermenge von Zeichen überein. Die folgenden Klassen stehen Ihnen bereits zur Verfügung.
Klasse | Bedeutung
. | jedes beliebige Zeichen
\w | jedes alphanumerische Zeichen oder _
\W | jedes nicht-alphanumerische Zeichen
\d | beliebiges numerisches Zeichen (0-9)
\D | jedes nicht-numerische Zeichen
\s | jedes Whitespace (=Leerzeichen) (Leerschritt, Tab)
Sie können auch Ihre eigenen Zeichenklassen konstruieren, indem Sie eine Gruppe von Zeichen mit eckigen Klammern "[]" umgeben. Die vordefinierten Klassen (außer ".") können innerhalb der Klammern verwendet werden. Wenn ein Minuszeichen "-" zwischen zwei Zeichen steht, repräsentiert dies einen Wertebereich. Auf diese Weise steht [a-z] für alle kleingeschriebenen Buchstaben von a bis z, und [a-zA-Z] für alle sowohl groß- als auch kleingeschriebenen Buchstaben von a bis z. Um das "-" als Teil der Klasse einzubeziehen, platzieren Sie es am Anfang oder Ende der Zeichenfolge. Wenn das erste Zeichen innerhalb der eckigen Klammern ein Zirkumflex "^" ist, dann repräsentiert die Klasse alles außer den angegebenen Zeichen. [^a-z] stimmt mit jedem Zeichen überein, welches kein kleingeschriebener Buchstabe ist. Metazeichen - Alternativen Das Platzieren von "|" zwischen zwei Gruppen von Objekten repräsentiert Alternativen. a|b stimmt sowohl mit a als auch mit b überein. ab|cd stimmt mit "ab" oder "cd" überein, jedoch nicht mit "ac". "|" gruppiert Zeichen beginnend vom Trennzeichen ("(", "[", oder Anfang des Musters) bis zu sich selbst, und dann bis zum Ende des Musters. Alternativen können mit runden Klammern "()" umgeben werden, um zu verdeutlichen, was zusammengehört, wie z.B. in a(bc|de)f. Alternativen werden von links nach rechts abgearbeitet. So dass bey|beyond schon bei bey übereinstimmt; sogar wenn die Zeichenfolge "beyond" lautet. Metazeichen - Position Die folgenden Metazeichen steuern, wo die Übereinstimmung auf einer Zeile stattfinden kann. Beachten Sie: \A und \Z geben den Anfang bzw. das Ende eines Textes an. Da Beyond Compare jedoch auf Basis einer zeilenweisen Suche arbeitet, haben sie denselben Effekt wie ^ und $.
Metazeichen | Bedeutung
^ | Übereinstimmung nur am Zeilenanfang
$ | Übereinstimmung nur am Zeilenende
Metazeichen - Iteratoren Alles in einem regulären Ausdruck darf von einem Iterator-Metazeichen gefolgt werden, welches sich wiederum auf das Zeichen vor ihm bezieht. Es gibt zwei Arten von Iteratoren: greedy (gierig) und non-greedy (genügsam). Greedy (Gierige) Iteratoren ergeben so viel wie möglich Übereinstimmungen, während non-greedy (genügsame) Iteratoren so wenig wie möglich Übereinstimmungen ergeben. Greedy (Gierig):
Metazeichen | Bedeutung
* | null oder mehr des voranstehenden Zeichens (äquivalent zu {0,})
+ | eines oder mehr des voranstehenden Zeichens (äquivalent zu {1,})
? | null- oder einmaliges Auftreten (äquivalent zu {0,1})
{n} | exakt n-maliges Auftreten (äquivalent zu {n,n})
{n,} | n-maliges oder mehrfaches Auftreten
{n,m} | mindestens n-maliges, jedoch nicht mehr als m-maliges Auftreten
Non-greedy (Genügsam):
Metazeichen | Bedeutung
*? | null- oder mehrmaliges Auftreten
+? | ein- oder mehrmaliges Auftreten
?? | null- oder einmaliges Auftreten
{n}? | exakt n-maliges Auftreten
{n,}? | mindestens n-maliges Auftreten
{n,m}? | mindestens n-maliges, jedoch nicht mehr als m-maliges Auftreten
Metazeichen - Unterausdrücke Auch runde Klammern "()" können zur Gruppierung von Zeichen für Iteratoren und Rückreferenzen (siehe unten) verwendet werden. (bey){4,5} stimmt mit 4 und 5 Vorkommen von "bey" überein. (abc|[0-9])* stimmt mit jeder Kombination von "abc" und den Ziffern 0 bis 9 überein (z.B. "abc5", "679abc" und "abc77abc"). Metazeichen - Rückreferenzen Jede Zeichenfolge, die innerhalb von runden Klammern "()" übereinstimmt, wird als Unterausdruck gespeichert, auf den später mit \1 bis \9 (entsprechend der Reihenfolge von links nach rechts) zugegriffen werden kann. b(.)\1n stimmt mit "been" und "boon" überein, jedoch nicht mit "bean", "ben" oder "beeen". Modifikatoren Modifikatoren (oder Modifier) ändern das Übereinstimmungsverhalten von ihrer Platzierung aus. Ist der Modifier in einem Unterausdruck enthalten, wirkt er sich nur auf diesen Unterausdruck aus. Verwenden Sie (?i) und (?-i) um die Beachtung von Groß-Kleinschreibung bei der Übereinstimmung zu steuern. Beispiele:
(?i)Beyond Compare | stimmt mit "Beyond Compare" und "beyond compare" überein
(?i)Beyond (?-i)Compare | stimmt mit "Beyond Compare" und "bEyOnD Compare" überein, jedoch nicht mit "beyond compare"
Siehe auch Beispiele für reguläre Ausdrücke