2. Strings

Strings finden

Als erstes wollen wir mal einen einfachen String finden, dran denken ein Regex beginnt mit dem Delimiter und endet auch mit selbigen.

1
2
$string = 'foobar';
$regex = '/foo/';
Sollte folgende Ausgabe ergeben:
1
Array ( [0] => foo ) 

Das heißt, "foo" wurde in der Zeichenkette gefunden.


Casesensitive

Versuchen wir etwas ähnliches:

1
2
$string = 'Foobar';
$regex = '/foo/';
Ausgabe:
1
Keine Treffer!

Reguläre Ausdrücke sind casesensitiv, sie unterscheiden Groß- und Kleinschreibung, deswegen erzielen wir keinen Treffer.


Möchte man nicht zwischen Groß- und Kleinbuchstaben unterscheiden, kann man den Modifier i verwenden.

1
2
$string = 'Foobar';
$regex = '/foo/i';
Ausgabe:
1
Array ( [0] => foo ) 

Mehrere Zeichenketten

Nun kann man natürlich auch auf mehrere Zeichenketten suchen. Dafür verwendet man das Zeichen |.

1
2
$string = 'Foobar';
$regex = '/foo|bar/';
Ausgabe:
1
Array ( [0] => bar ) 

Der zweite gesuchte String "bar" wird gefunden, "foo" wird nicht gefunden, da wir casesensitiv geprüft haben.
Wenn ihr etwas damit rumprobiert, werdet ihr feststellen, dass immer nur der erste Treffer zählt, da sobald ein Ausdruck zutrifft, die Aktion beendet wird und die Zeichenkette somit übereinstimmt.

Teilergebnisse

Bisher bekommt man immer nur ein einzelnes Ergebnis, man kann allerdings auch mehrere Teile suchen, indem man die Zeichenketten in einfache Klammern ( und ) setzt

1
2
$string = 'foobar wird häufig verwendet.';
$regex = '/(foo)(bar)/';
Ausgabe:
1
Array ( [0] => foobar [1] => foo [2] => bar ) 

Ergebnis 0 gibt das gesamte Ergebnis zurück "foobar" wurde gefunden, Ergebnis 1 und 2 geben die jeweiligen Teile, die wir mit Klammern gekennzeichnet haben.


Ein etwas speziellerer Ausdruck wäre dieser:

1
2
$string = 'foobar wird häufig verwendet. Warum wird foobar benutzt?';
$regex = '/(foo|bar) wird häufig verwendet./';
Ausgabe:
1
Array ( [0] => bar wird häufig verwendet. [1] => bar ) 

In diesem Fall suchen wir nach "foo wird häufig verwendet." oder "bar wird häufig verwendet", zweiteres trifft natürlich nur zu.