Reguläre Ausdrücke.

Reguläre Ausdrücke.

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 :

Es gibt unterschiedliche Dialekte zur Beschreibung regulärer Ausdrücke. Sie können zwischen den folgenden zwei Dialekten wählen:

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: Achten Sie bitte darauf, die \ in Strings durch Verdoppeln zu escapen.

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:

  1. Kompilieren (pcre_compile) : Kompilieren des regulären Ausdruckes in eine interne Darstellung
  2. Untersuchen ((pcre_study) : Die Funktion untersucht den kompilierten Ausdruck, um herauszufinden, ob zusätzliche Informationen extrahiert werden können, die die Suche beschleunigen könnten.
  3. Ausführen (pcre_exec) : Ausführen der Suche nach dem regulären Ausdruck im Eingabestring

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

Seit

Verfügbarkeit
priint:comet InDesign® Plug-Ins, comet_pdf

Alphabetic index HTML hierarchy of classes or Java