6.4 Fortgeschrittene Sonderthemen
In diesem Abschnitt werden noch einige Sonderthemen behandelt. Diese wurden für Interessierte als – nicht prüfungsrelevant – ausgelagert, damit das Kapitel überschaubar bleibt.
Maskieren von Sonderzeichen
Manchmal möchte man in einem String die Sonderzeichen maskieren. Hierzu dient die PHP-Funktion preg_quote.
Hier ein Beispiel für einen String mit Sonderzeichen (Zeile 2) und einer Maskierung mit preg_quote()
(Zeile 3).
Er hatte $-Zeichen in den \"Augen\"
Nur ohne Sonderzeichen bzw. mit maskierten Sonderzeichen kann dieser String mit einem regulären Ausdruck problemlos bearbeitet werden.
Für Fortgeschrittene: Single-line-Mode
Der Single-line-Mode kann dafür verwendet werden, in HTML-Dateien vom Begin-Tag bis zum End-Tag alles zu bearbeiten, auch wenn der Tag über mehrere Zeilen geht.
Selbstverständlich können auch mehrzeilige Kommentare (C, Java) hiermit bearbeitet werden. In dem kleinen Beispiel sollen Kommentare gelöscht werden, die zwischen /*
und */
über mehrere Zeilen gehen.
Ausgabe mit Kommentaren
Ausgabe ohne Kommentare
Beispiel mod_rewrite für den Apache Webserver
Das Modul mod_rewrite kann verwendet werden, um URLs zu erkennen, umzuschreiben und intern oder auch beim Benutzer weiterzuleiten. So findet man heute häufig schöne URLs, die keine Dateinamen oder lange Parameterketten mehr enthalten. Für solche Zwecke wird häufig dieses Modul verwendet.
Sie haben bereits die .htaccess im Kapitel Apache kennengelernt. Mit Hilfe dieser Datei können wir nun nicht nur die verwendete Sprache verstecken, sondern auch die Seite ein wenig besser leserlich machen (SEO).
RewriteEngine On
RewriteBase /
# der Inhalt nach dem ersten Slash wird als Seite bestimmt
# weitere Parameter werden angehängt
RewriteRule ^(.*)\/(.*)\/(.*)$ index.php?page=$1&id=$2&$3
Beispiel:
http://www.abc.de/home/4/sid=123456
leitet intern weiter auf:
index.php?page=home&id=4&sid=123456
Natürlich können Sie beliebig viele Regeln produzieren, die unterschiedlich viele Parameter verarbeiten. Es gilt allerdings dann auch festzulegen, dass nur eine passt.
Die Apache-Konfigurationsdatei wird von oben nach unten gelesen und jeder passende Ausdruck wird verwendet, es sei denn, Sie markieren diesen mit [L]
für "last rule". Dies hat auch einen kleinen Geschwindigkeitsvorteil, da dann das Vergleichen der Strings abbricht.
Das Beispiel http://www.abc.de/home/4/sid=123456
passt auf die folgenden regulären Ausdrücke.
RewriteRule ^home\/(.*)\/(.*)$ index.php?id=$1&$2 [L]
RewriteRule ^(.*)\/(.*)\/(.*)$ alle.php?page=$1&id=$2&$3
Um dieses nun zu verhindern, hängen Sie ein [L]
für "last rule" an.
RewriteRule ^home\/(.*)\/(.*)$ index.php?id=$1&$2 [L]
RewriteRule ^(.*)\/(.*)\/(.*)$ alle.php?page=$1&id=$2&$3
Finite Automaten und Reguläre Ausdrücke
Es gibt drei Varianten für Werkzeuge, die reguläre Ausdrücke bearbeiten können:
-
DFA: Deterministischer finiter Automat
Der DFA betrachtet Zeichen für Zeichen und kann intern keine Suchtreffer speichern. Somit kann DFA nicht „suchen und ersetzen“, da die Treffer nicht zwischengespeichert wurden. -
NFA: Nicht-deterministischer finiter Automat
Der NFA basiert auf Backtracking und merkt sich alle Stellen, wenn mehr als eine Treffermöglichkeit existiert. Anschließend werden alle Treffermöglichkeiten nacheinander bearbeitet. Somit können Muster wies/(Internet)(Programmierung)/$2 im $1/
erfolgreich umgesetzt werden. -
POSIX-NFA: als eine Abwandlung des NFA
Hinweis
Alle in dem gesamten Kapitel behandelten Regeln und Beispiele beruhen auf dem POSIX-NFA. Dieser wird in PHP (wie auch in Perl) verwendet. Manchmal wird der Begriff POSIX-NFA in der Literatur verwendet und Sie können dann direkt an die hier beschriebenen Regeln und Beispiele denken.