Metazeichen und Zeichenklassen

.beliebiges Zeichen (m: außer Zeilenumbr.)

Steht im regulären Ausdruck für genau ein beliebiges Zeichen außer Zeilenumbruch, wenn Modifier m gesetzt wurde.

Beispiele:

/H.nd/ => findet Hund – Hand – H7nd etc.

/Me.er/ => findet Meier – Meyer – Meter, jedoch nicht Maier

+mindestens einmal

Beispiele:

/das+/ => findet das – dass – dasss etc.

!<span>.+</span>! => findet <span>x</span> – <span>Wolf</span>, aber standardmäßig (greedy = gierig) auch <span>Wolf</span></div> ... <span>Wolfshund</span>

*null oder mehrmals

Beispiele:

!<p>.+</p>!U => findet alle Absätze außer leere:

Das Subpattern (hier kein weiterer Zugriff, da nicht geklammert) .+ sucht beliebige Zeichen, mindestens eins muß vorkommen.

Damit dies auf einen einzelnen Absatz begrenzt bleibt, ist der Modifier U gesetzt, der ein nichtgieriges Verhalten der Regex-Engine auslöst: Suche <p>, dem beliebige Zeichen folgen, und das mindestens einmal, dem schließlich ein </p>, verhalte dich dabei aber so sparsam wir nur möglich.

Will man auf die Absatzinhalte zugreifen, muß ein Subpattern gebildet werden, indem der schon oben so genannte Teil geklammert wird:

!<p>(.+)</p>!U

Hier läßt sich mit \1 (etwa Perl) oder $1 (PHP) je nach Engine auf Treffer zugeifen.

?null oder einmal

Beispiele:

/dass?/ => findet genau das und dass, aber nicht – dasx etc.

Will man etwa alle Artikel und Konjunktionen finden, bietet sich ein solcher regulärer Ausdruck an:

/\bdass?\b/ => die Begrenzer \b schließen Treffer wie dasss aus.

Oder ausgefeilter:

/\bda(ß|ss?)\b/ => findet außerdem daß, die Konjunktion nach alter Rechtschreibung, also ingesamt das, dass und daß.

Will man nur die Konjunktionen finden, ist es leichter:

/\bda(ß|ss)\b/

/Schüler(in)?/ => findet Schüler und Schülerin

{x}xmal

Beispiele:

/ab2a/ => findet abba

{x,}mindestens xmal

Beispiele:

/ab{2,}a/ => findet abba – abbba – abbbba etc.

{x,y}mindestens xmal, höchstens ymal

Beispiele:

/ab{2,3}a/ => findet abba und abbba, jedoch nicht abbbba etc.

{,y}höchstens ymal

Beispiele:

/ab{,3}a/ => findet aba, abba und abbba, jedoch nicht abbbba etc.

+? und *?umschalten zwischen greedy und non-greedy (abhängig von Flag U)
\Metazeichen maskieren oder mit Ziffer Backreference
|Alternative

Beispiele:

/Hund|Katze|Maus/ => findet Hund, Katze und Maus

/Me(i|y)er/ => findet Meier und Meyer

Nicht richtig gedacht wäre:

/Mei|yer/ => findet Mei und yer

[]Zeichenklasse

Beispiele:

/[HLM]aus/ => findet Haus, Laus und Maus

/[aeoiuAEIOU].+/ => findet alle Wörter, die mit einem Vokal beginnen

[^]negierende Zeichenklasse

Beispiele:

/[^aeoiuAEIOU].+/ => findet alle Zeichen außer Vokalen

()Pattern
^Text- (s) oder Zeilenanfang (m); Negation in Zeichenklassen
$Text- (s) oder Zeilenende (m)
\zTextende
(?<=Ausdruck)look-behind assertion
(?<!Ausdruck)look-behind assertion, Negation
(?=Ausdruck)look-ahead assertion
(?!Ausdruck)look-ahead assertion, Negation
(?(if)then|else)Bedingung
\dZiffer: [0-9]

Beispiele:

/\d+/ => findet in: 1984 ist ein Roman von George Orwell. => 1984

/\d{1,2}:\d{2}/ => findet Zifferfolgen wie Uhrzeiten: 9:37, 10:05, 23:42

\Dalles außer Ziffern: [^0-9]
\wBuchstaben, Ziffern, Unterstrich: [a-z0-9_]
\WNegation von \w: [^a-z0-9_]
\sWhitespace: [ \r\n\t\f\v]
\Salles außer Whitespace: [^ \r\n\t\f\v]
\bWhitespace vor oder nach Wort
\BNegation von \b