m/Zu suchender Ausdruck/cgimosx;Wobei das Trennzeichen(hier: '/') geändert werden kann und das 'm' vor dem ersten Trennzeichen optional ist, wenn das Trennzeichen ein '/' ist. Gesucht wird mit den Operatoren '=~' und '!~'. Im skalaren Kontext wird wahr zurückgeliefert, wenn die Suche erfolgreich wahr, falsch, wenn nicht. Benutzt man einen regulären Ausdruck im Listenkontext, werden alle gruppierten Ergebnisse zurückgeliefert. Später mehr zu Gruppen.
| Option | Wirkung |
|---|---|
| c | Falls g benutzt wird, wird die Position im Suchstring nach der Suche nicht zurückgesetzt. Hiermit findet man im skalaren Kontext immer das nächste Ergebnis. |
| g | Alle Ergebnisse finden. |
| i | Groß-/Kleinschreibung nicht beachten. |
| m | Festlegen, dass der Suchstring mehrere Zeilen hat. Hier kann ein '.' sowie '\s' auch für einen Zeilenumbruch stehen. Mit dieser Option stehen '^' und '$' für den Anfang bzw. das Ende einer Zeile. |
| o | Den regulären Ausdruck nur einmal compilieren. |
| s | Festlegen, dass der Suchstring nur eine Zeile hat.(Auch wenn er mehrzeilig ist wird innerhalb des regulären Ausdrucks von nur einer Zeile ausgegangen.) |
| x | Erweiterte reguläre Ausdrücke verwenden. |
| Element | Bedeutung |
|---|---|
| ^ | '^' steht für den Anfang des Suchstrings. |
| $ | '$' steht für das Ende des Suchstrings. |
| . | Ein '.' steht für irgendein beliebiges Zeichen. |
| \d | Eine Zahl von 0-9 kann durch '\d' ersetzt werden. |
| \w | Ein Wortzeichen([A-z0-9-_]) kann durch '\w' ersetzt werden. Umlaute zählen meistens nicht dazu. |
| \s | Whitespace wird durch '\s' ersetzt. \s beinhaltet also Tabs und Leerzeichen. |
| \D | Ein Zeichen, dass keine Ziffer ist. |
| \W | Ein Zeichen, dass kein Wortzeichen('\w') ist. |
| \S | Ein Zeichen, dass kein Whitespace enthällt. |
| \n | Entspricht einem newline(Zeilenumbruch). |
| \r | Entspricht einem Wagenrücklauf. |
| \t | Entspricht einem Tabulator. |
| \f | Entspricht einem Seitenvorschub. |
| \b | Eine Wortgrenze kann durch '\b' ersetzt werden. |
| \B | Hier darf keine Wortgrenze stehen. |
| [...] | In eckigen Klammern geben sie eine Zeichengruppe an. Der gesamte Ausdruck in eckigen Klammern steht aber nur für ein Zeichen der angegebenen Gruppe. Falls sie eine Zahlenmenge angeben möchten, können sie einfach 'erste Zahl', dann '-' und dann 'zweite Zahl' innerhalb der eckigen Klammern schreiben.(Z.B.: [1-9]). Falls sie eine Zeichenmenge innerhalb von eckigen Klammern angeben möchten, können sie ebenfalls 'erstes Zeichen', '-', 'letztes Zeichen' verwenden, wobei sie zwischen Groß-/Kleinschreibung unterscheiden können.(Z.B.: [A-Z], [a-z], [A-z]) |
| [^...] | Das selbe wie '[...]', nur das der Ausdruck nur für ein Zeichen, welches nicht in der Zeichengruppe angegeben wurde steht. |
| (...) | In runden Klammern Gruppieren sie einen Ausdruck. Dieser wird in einer Spezialveriablen gespeichert und im Listenkontext zurückgeliefert. Die Spezialvariable in welcher der Ausdruck gespeichert wird, ergibt sich aus Anzahl gruppierter Ausdrücke. |
| {N,M} | Diesen Ausdruck können sie einem Element/Zeichen/einer Gruppe nachstellen, diese/s muss dann mindestens N mal und höchstens M mal vorhanden sein. Lassen sie M weg, aber das Komma bleibt, muss der Vorgänger mindestens N mal vorhanden sein, oder darüber hinaus. Lassen sie das M und das Komma weg, so muss der Vorgänger genau N mal vorhanden sein. |
| + | Ein '+' können sie einem Element/Zeichen/einer Gruppe nachstellen, diese/s muss dann mindestens einmal vorhanden sein. |
| * | Ein '*' können sie einem Element/Zeichen/einer Gruppe nachstellen, diese/s darf dann beliebig oft vorhanden sein. |
| ? | Ein '?' können sie einem Element/Zeichen/einer Gruppe nachstellen, diese/s darf dann ein, oder kein mal vorhanden sein. |
| | | '|' steht für ODER. Wenn ein Ausdruck vor und ein Ausdruck nach einem '|' steht, muss entweder der eine, oder der andere Ausdruck an dieser Stelle stehen. |
$var =~ /^\b?(\w+)\b(\w+)\b(\w+)\b?$/;Die gruppierten Elemente würden jetzt in $1, $2 und $3 stehen. Und zwar in der selben Reihenfolge, wie sie innerhalb des Ausdrucks gruppiert wurden. Noch ein Beispiel:
$var =~ /((\d\d?)\.(\d\d?)\.(\d{4}|\d\d))/;
Jetzt würde $1 die gesamte Ziffernfolge, mitsamt der . enthalten. $2 und $3 bestünden aus 1, oder 2 Ziffern, und $4 aus 2, oder 4 Ziffern.
Sicher haben sie festgestellt, dass dieser Ausdruck möglicherweise ein Datum parsen könnte, dass stimmt aber nicht ganz, denn \d steht für irgendeine Zahl, also ginge auch 00.99.00, oder 34.0.96.
Ein bisschen besser wäre es hiermit:
$var =~ /((0?[1-9]|[12]\d|3[01])\.(0?[1-9]|1[012])\.(\d{4}|\d\d))/;
Auch hier sind noch Fehler möglich, allerdings schon sehr eingeschränkt.
Ein Tag der nicht zum Monat passt wäre drin.
Verwendet man den regulären Ausdruck im Listenkontext, erhällt man sofort alle gruppierten Elemente in der angegebenen Liste.
Beispiel:
@datum = $var =~ /((0?[1-9]|[12]\d|3[01])\.(0?[1-9]|1[012])\.(\d{4}|\d\d))/;