AdWz WP-Plugin 17 – Regex

(AdWz; Auf dem Weg zum) WP-Plugin 17 – Regex

Regex; regular expressions (reguläre Ausdrücke) – in den 1960ern von Ken Thompson für die Entwicklung von qed und grep zuerst benutzt – sind Suchmuster, um eine definierte Menge aus einer Zeichenkette zu extrahieren. Vom Suchen, Ersetzen bis Prüfen können in vielen Editoren, mit Tools wie z.B. grep und in so gut wie allen Programmiersprachen reguläre Ausdrücke verwendet werden.

Beispiel eines regulären Ausdrucks zur Überprüfung einer E-mail-Adresse in richtiger Schreibweise (Syntax).

^([a-zA-Z0-9]((\.|\-)?[a-zA-Z0-9])*)@([a-zA-Z]((\.|\-)?[a-zA-Z0-9])*)\.([a-zA-Z]{2,8})$

Auf den ersten Blick kompliziert, aber angefreundet mit der Syntax kann schnell mit diesem mächtigen Tool viel Arbeit gespart werden.

Ohne weiter auf das o.a. Beispiel einzugehen werden für die Erweiterung des Plugins zur Verarbeitung der Post-Forms an Permalinks einige reguläre Ausdrücke verwendet.

mg404rewrite

Im ersten Schritt werden alle Formulare mit der Methode Post gesucht. Die URL der Aktion wird extrahiert und zur weiteren Verarbeitung überprüft.

Varianten

Folgende Varianten – bestimmt nicht vollständig – müssen durch reguläre Ausdrücke gefunden und ausgewertet werden.

1
2
3
4
5
6
7
... <form method="post" action="mypermalinkurl"> ...
... <form method='post' action='mypermalinkurl'> ...
... <form method=post action=mypermalinkurl> ...
... <form action="mypermalinkurl" method="post"> ...
... <form action='mypermalinkurl' method='post'> ...
... <form action=mypermalinkurl method=post> ...
... <form method="post" action="mypermalinkurl"> <input ...>myinputfield</input> ...

Regex Form-Tag

Regulärer Ausdruck wird auf dem übergebenen Ausgabepuffer angewendet.

Kurz notiert von links nach rechts.

<form

Findet genau die angegebene Zeichenketten.

<form.+method=

Das Ergebnis wird auf viele Zeichen bis zum Ende der Zeichenkette method= erweitert. . für ein beliebiges Zeichen und + (Wiederholungsfaktor: min. 1) für mindestens eins oder mehrere des vorhergenden regulären Ausdrucks (beliebiges Zeichen, der Punkt .).

<form.+method=["']?post

Der Ausdruck wird durch die Zeichen in eckigen Klammern und ? (Wiederholungsfaktor: optional) zusätzlich der Zeichenkette post um optional ein oder ein erweitert, um die unterschiedlichen Notationen abzudecken (siehe Varianten Bsp. Unterschiede Zeile 1 , 2 und 3).

<form.+method=["']?post.*?>

Das Form-Tag – nicht mehr und nicht weniger – wird benötigt. Durch die letzte Erweiterung beliebiges Zeichen . in beliebiger Anzahl * (Wiederholungsfaktor: eins, viele oder keins) bis zum abschließenden Zeichen >, wird das Tag Form im ganzen gefunden.

Nicht mehr durch das letzte ? (non-greedy). Ohne das Fragezeichen hinter dem Wiederholungsfaktor würde das Ergebnis bis zur letzten > des Ausgabepuffers reichen – etwas viel (siehe Bsp. Variante Zeile 7).

Die Wiederholungsfaktoren sind erst einmal „gierig“ (greedy) – bis zum letzten und durch die zusätzliche Angabe ? wird der Ausdruck „genügsam“ (non-greedy) – bis zum ersten aufgelöst.

Regex Action-URL

Regulärer Ausdruck wird auf das Ergebnis von Regex Form-Tag angewendet.

.*action=["'](.*?)["' >]

Referenzierung auf die URL durch die Klammerung. Die URL wird im zweiten Schritt ausgewertet, da die Reihenfolge der Attribute im Form-Tag nicht bekannt ist (siehe Bsp. Variante Zeile 1-3 und 4-6).

Gut, mit Look-around assertions hätte man bestimmt in einem Schritt auch die URL ermitteln können, aber wollen ja auch nicht übertreiben.

Regex Non-Permalink

Regulärer Ausdruck wird auf das Ergebnis von Regex Action-URL angewendet.

Wie der Webserver eingehende Anfragen auswertet, kann außerhalb der Umgebung nicht für alle Fälle vorhergesagt werden.

Der folgende Ausdruck soll die URL zur weitere Verarbeitung auswerten. Endet die URL auf .php ist die Zieladresse bestimmt kein Permalink und das Formular muss nicht berücksichtigt werden.

.*\.php$

$ kennzeichnet das Ende der Zeichenkette und \ hebt die Metabedeutung des nächsten Zeichens . auf.

weiter …

Die Konfigurationswerte für die regulären Ausdrücken können im Administrationsbereich auf der Seite Einstellungen / Verschiedenes abgelegt werden.

mg404rewrite_settings_misc_vals

Apropos Konfiguration: Bin gleich über einen Fehler gestolpert. Die Werte wurden nicht richtig dargestellt. Das Zeichen “ hatte den Wert der Eigenschaft value vorzeitig beendet. Die in der Form darzustellenden Werte einfach zuvor mit der WordPress-Funktion attribute_escape() anpassen.

Soviel erst einmal zu den regulären Ausdrücken. Das Plugin muss nur noch erweitert werden, damit alle Post-Forms an Permalinks verarbeitet werden können. Dazu ein anderes mal mehr … :-)

Tags: , , ,

Hinterlasse eine Antwort