Reguläre Ausdrücke werden zur Beschreibung von Mustern in Zeichenketten verwendet. So können Sie beispielsweise in einem TaggedText nach allen Absatzstil-Marken suchen, obwohl Absätze verschiedene (oder keine) Stile haben :
<ParaStyle:Style1>...
<ParaStyle:Stil1>...
<ParaStyle:>
<ParaStyle:2\>3>
Suche <ParaStyle:(<0x[0-9A-F]{4,4}>|\\\\>|\\\\<|[^<>])*>
Reguläre Ausdrücke können an den folgenden Stellen verwendet werden :
Ab v3.4 R9000 und CS5 werden reguläre Ausdrücke ausschließlich durch PCRE verarbeitet. Lediglich CS4 verwendet noch die alte Implementierung für GNU-kompatible reguläre Ausdrücke.
GNU-konforme reguläre Ausdrücke unterstützen die Basisfunktionalität, die man von regulären Ausdrücken erwartet (Zeichen und Zeichenkette, Wiederholungen, Wortgrenzen und Ersetzungen). Allerdings enthält die verwendete Implementierung einen Fehler für n-fache Wiederholungen. Ausdrücke der Form [0-9]{4} können nicht richtig gefunden werden. Ersetzen Sie solche Ausdrücke bitte in die Form [0-9][0-9][0-9][0-9].
PCRE unterstützt den vollen Leistungsumfang moderner String-Matcher. Sie können unter anderem folgende Features verwenden:
Wenn Sie mit regulären Ausdrücken nicht vertraut sind - im Internet finden Sie dazu Informationen. Informationen über die Theorie der
reguläre Ausdrücke können Sie unter dem Stichwort Formale Sprachen finden.
Eine gute Beschreibung von PCRE finden Sie hier.
Äußerst hilfreich ist auch der Online regex tester.
Damit die Funktionen strreplace, strstrpos und strstr erkennen, dass der Suchstring ein regulärer Ausdruck ist, muss der Suchstring mit dem Präfix
regexp: oder pcre:
beginnen. Ab v3.4 R9000 und CS5 wird ausschließlich PCRE unterstützt. Der Präfix regexp: ist weiter gültig, führt aber ebenfalls zur PCRE Verarbeitung.
Zeichen in regulären Ausdrücken werden einfach durch sich selbst beschrieben. Aufeinanderfolgende Zeichen im regulären Ausdruck fordern (natürlich) die gleichen aufeinanderfolgenden Zeichen im Text.
Suche alle Auftreten von 1234
456 1234 6748 441234567 64641329 4321 4321 999
Suche 1234
Das hätten Sie auch mit einer einfachen Suche machen können. Dürfen die Zeichen 1234 jedoch in beliebiger Reihenfolge stehen, wird es schon etwas komplizierter (Sie könnten jetzt natürlich nach allen 24 Kombinationen suchen.)
Suche alle Auftreten der Ziffern 1234 in beliebiger Reihenfolge.
456 1234 6748 441234567 64641329 4321 999
Suche [1234][1234][1234][1234]
Jeder Klammerausdruck passt auf genau eins der Zeichen innerhalb der Klammer. Die Klammern dürfen beliebig viele Ascii-Zeichen oder Ascii-Zeichenbereiche der Form z1-zx enthalten. Die Angabe [a-zA-Z_] passt also auf alle Buchstaben und den Underscore. Mit [^...] legen Sie fest, dass die Zeichen der Klammer nicht gefunden werden sollen. Die Angabe [^ \t\r\n] heißt also, dass an dieser Stelle kein Leerzeichen, Tab oder Zeilentrennerr stehen darf.
GNU-kompatible Reguläre Ausdrücke können „Sonderzeichen“ (z.B. äöü) erkennen und verarbeiten. Aber im regulären Ausdruck selbst dürfen keine Sonderzeichen enthalten sein. In PCRE-Ausdrücken dürfen beliebige Unicode-Zeichen und Unicode Character Properties (UCP) verwendet werden.
Sollen die Zeichen [], (), {} gefunden werden, müssen Sie mit einem vorangestellten Backslash kodiert werden (z.B. \[). Achten Sie in Skripten darauf, dass der Backslash (\) in Strings verdoppelt werden muss (\\).
Aber auch wenn Sie für den obigen Ausdruck jetzt Zeichenbereiche verwenden, so richtig elegant ist das auch noch nicht :
Suche alle Auftreten der Ziffern 1234 in beliebiger Reihenfolge.
456 1234 6748 441234567 64641329 4321 999
Suche [1-4][1-4][1-4][1-4]
Besser wird es erst, wenn Sie die Wiederholungen beschreiben können. Dazu gibt es verschiedene Möglichkeiten :
Beschreibung | Beispiel | |
? | Das Zeichen oder die Zeichenkette darf 0 oder einmal vorkommen. | ab?a (aa, aba) |
+ | Das Zeichen oder die Zeichenkette muss einmal vorkommen und darf dann beliebig oft wiederholt werden | ab+a (aba, abba, abbba, ...)
a(b|c)+d (abd, acd, abbcd, ...) |
* | Das Zeichen oder die Zeichenkette können beliebig oft wiederholt werden. | ab*a (aa, aba, abba, abbba, ...)
a(b|c)*d (ad, abd, acd, abcbcbcd, ...) |
{n} | Das Zeichen oder die Zeichenkette werden n-mal wiederholt | ab{3}c (abbbc) |
{n, m} | Das Zeichen oder die Zeichenkette werden mindestens n-mal, aber maximal m-mal wiederholt | ab{2, 3}a (abba, abbba) |
Damit kann der Ausdruck ordentlich beschrieben werden:
Suche alle Auftreten der Ziffern 1234 in beliebiger Reihenfolge.
456 1234 6748 441234567 64641329 4321 999
Suche [1-4]{4}
Wortgrenzen können mit dem Zeichen \b beschrieben werden. Damit kann die obige Suche einfach auf Worte eingeschränkt werden:
Suche nach alle 4-stellingen Wörter gebildet aus den Ziffern 1234.
456 1234 6748 441234567 64641329 4321 999
\b[1-4]{4}\b
Teile des regulären Ausdruckes dürfen mit () geklammert werden. Auf die so entstandenen Unterausdrücke kann im Ausdruck und im Ersetzen-String zugegriffen werden.Wollen Sie Teile des gefundenen Strings im Ersetzen-String verwenden, müssen Die folgende Tabelle zeigt, wie Sie im Ersetzen-String auf die aktuellen Werte der Klammern des regulären Ausdruckes zugreifen können.
Definitionsbereich | Beschreibung | |
\0 | Ersetzenstring | Gesamter Wert des regulären Ausdruckes |
\1, \2, ..., \9 | Regulärer Ausdruck und Ersetzenstring |
Wert der ersten, zweiten, ..., neunten Klammer Sie können \1, ... \9 auch im regulären Ausdruck verwenden. Damit lassen sich etwa alle Zahlen finden, die mit der gleichen Ziffer beginnen und enden (\b([0-9])[0-9]*\1\b). |
\pC[0-9] | Ersetzenstring | Das Zeichen C wird so oft wiederholt, wie der gefundene Wert 0, ..., 9 lang ist. C darf dabei ein beliebiges Ascii-Zeichen sein. (Umlaute oder andere Unicode-Zeichen > 127 werden hier nicht unterstützt.) |
\u[0-9] | Ersetzenstring | Der aktuelle Klammerausdruck 0, ..., 9 wird in Kleinbuchstaben eingesetzt. | \l[0-9] | Ersetzenstring | Der aktuelle Klammerausdruck 0, ..., 9 wird in Großbuchstaben eingesetzt. |
\r[0-9] | Ersetzenstring | Der aktuelle Klammerausdruck 0, ..., 9 wird umgekehrt eingesetzt. |
Bei allen dreistelligen Zahlen, die in Kleinbuchstaben eingeschlossen sind, werden diese Buchstaben getauscht.
000v5664w358x00l345m50v523w1f789g6040h928i01
000v5664x358w00m345l50w523v1g789f6040i928h01
Suche ([a-z])([1-9]{3})([a-z])
Ersetzen \3\2\1
Finde alle Wörter, die ein kleines r enthalten und ersetze Sie durch das Wort in Großschreibung :
Suche \b([^[:space:][:punct:]]*r[^[:space:][:punct:]]*)\b
Ersetze \u0
Ersetze alle <ParaStyle:...> durch ein HTML-Kommentar mit dem großgeschriebenen Stilnamen.
Suche <ParaStyle:((([^\>])|(\\>))*)>
Ersetze <--\u1-->
Und hier noch ein kleines Beispiel, das mit dem Absatz nichts zu tun hat : Finde alle Tags eines Tagged Textes :
Suche (<[a-zA-Z][a-zA-Z0-9_]*:(<)?)((([^><])|(\\>)|(\\<))*)(>)*
Es gibt keinen regulären Ausdruck, mit dem ein wohlgeformter Klammerausdruck erkannt werden kann. Die Sprache der wohlgeformten Klammerausdrücke ist nämlich nicht regulär.
PCRE bearbeitet die Suche nach regulären Ausdrücken in drei Schritten:
Jeder der drei Schritte, die automatisch bei jeder Suche nach reguären Ausdrücken mit PCRE ausgeführt werden, kann zusätzliche Optionen zur Bearbeitung erhalten. Im Folgenden werden die jeweils verfügbaren Optionen (in Englisch) beschrieben. Weitere Informationen zu den Optionen finden Sie über Internet-Suchen nach den Namen (z.B. PCRE_BSR_ANYCRLF) der Optionen.
Die Optionsnamen sind nicht in cScript definiert, verwenden Sie hier bitte die entsprechenden Zahlen. Um mehrere Optionen zu verwenden, können die Zahlen mit | addiert werden. Die Optionen werden ausschließlich bei der Verarbeitung regulärer Ausdrücke mit PCRE verwendet.
Kompilieren des gegebenen regulären Ausdruckes in eine interne Darstellung. Die Option PCRE_UTF8 ist standardmäßig aktiviert. Unter Windows ist zusätzlich die Option PCRE_UCP immer aktiviert.
Optionname | Value | Description |
PCRE_ANCHORED | 0x00000010 | Force pattern anchoring |
PCRE_AUTO_CALLOUT | 0x00004000 | Compile automatic callouts |
PCRE_BSR_ANYCRLF | 0x00800000 | \R matches only CR, LF, or CRLF |
PCRE_BSR_UNICODE | 0x01000000 | \R matches all Unicode line endings |
PCRE_CASELESS | 0x00000001 | Do caseless matching |
PCRE_DOLLAR_ENDONLY | 0x00000020 | $ not to match newline at end |
PCRE_DOTALL | 0x00000004 | . matches anything including NL |
PCRE_DUPNAMES | 0x00080000 | Allow duplicate names for subpatterns |
PCRE_EXTENDED | 0x00000008 | Ignore white space and # comments |
PCRE_EXTRA | 0x00000040 | PCRE extra features (not much use currently) |
PCRE_FIRSTLINE | 0x00040000 | Force matching to be before newline |
PCRE_JAVASCRIPT_COMPAT | 0x02000000 | JavaScript compatibility |
PCRE_MULTILINE | 0x00000002 | ^ and $ match newlines within data |
PCRE_NEVER_UTF | 0x00010000 | Lock out UTF, e.g. via (*UTF) |
PCRE_NEWLINE_ANY | 0x00400000 | Recognize any Unicode newline sequence |
PCRE_NEWLINE_ANYCRLF | 0x00500000 | Recognize CR, LF, and CRLF as newline sequences |
PCRE_NEWLINE_CR | 0x00100000 | Set CR as the newline sequence |
PCRE_NEWLINE_CRLF | 0x00300000 | Set CRLF as the newline sequence |
PCRE_NEWLINE_LF | 0x00200000 | Set LF as the newline sequence |
PCRE_NO_AUTO_CAPTURE | 0x00001000 | Disable numbered capturing parentheses (named ones available) |
PCRE_NO_START_OPTIMIZE | 0x04000000 | Disable match-time start optimizations |
PCRE_NO_UTF8_CHECK | 0x00002000 | Do not check the pattern for UTF-8 validity |
PCRE_UCP | 0x20000000 | Use Unicode properties for \d, \w, etc. |
PCRE_UNGREEDY | 0x00000200 | Invert greediness of quantifiers |
PCRE_UTF8 | 0x00000800 | Run in pcre_compile() UTF-8 mode |
Die Funktion untersucht den kompilierten Ausdruck, um herauszufinden, ob zusätzliche Informationen extrahiert werden können, die die Suche beschleunigen könnten.
Optionname | Value | Description |
PCRE_STUDY_JIT_COMPILE | 0x0001 | Requests just-in-time compilation if possible. |
Ausführen der Suche nach dem regulären Ausdruck im Eingabestring.
Optionname | Value | Description |
PCRE_ANCHORED | 0x00000010 | Match only at the first position |
PCRE_BSR_ANYCRLF | 0x00800000 | \R matches only CR, LF, or CRLF |
PCRE_BSR_UNICODE | 0x01000000 | \R matches all Unicode line endings |
PCRE_NEWLINE_ANY | 0x00400000 | Recognize any Unicode newline sequence |
PCRE_NEWLINE_ANYCRLF | 0x00500000 | Recognize CR, LF, & CRLF as newline sequences |
PCRE_NEWLINE_CR | 0x00100000 | Recognize CR as the only newline sequence |
PCRE_NEWLINE_CRLF | 0x00300000 | Recognize CRLF as the only newline sequence |
PCRE_NEWLINE_LF | 0x00200000 | Recognize LF as the only newline sequence |
PCRE_NOTBOL | 0x00000080 | Subject string is not the beginning of a line |
PCRE_NOTEOL | 0x00000100 | Subject string is not the end of a line |
PCRE_NOTEMPTY | 0x00000400 | An empty string is not a valid match |
PCRE_NOTEMPTY_ATSTART | 0x10000000 | An empty string at the start of the subject is not a valid match |
PCRE_NO_START_OPTIMIZE | 0x04000000 | Do not do "start-match" optimizations |
PCRE_NO_UTF8_CHECK | 0x00002000 | Do not check the subject for UTF-8 validity |
PCRE_PARTIAL | 0x00008000 | ) Return PCRE_ERROR_PARTIAL for a partial |
PCRE_PARTIAL_SOFT | 0x00008000 | ) match if no full matches are found |
PCRE_PARTIAL_HARD | 0x08000000 | Return PCRE_ERROR_PARTIAL for a partial match if that is found before a full match |
Alphabetic index HTML hierarchy of classes or Java