Top
PHP Tutorial – Schritt 13: Suchen und Ersetzen – RonnyDee´s Blog
fade
2416
post-template-default,single,single-post,postid-2416,single-format-standard,eltd-core-1.1.1,flow child-child-ver-1.0.0,flow-ver-1.3.7,eltd-smooth-scroll,eltd-smooth-page-transitions,ajax,eltd-blog-installed,page-template-blog-standard,eltd-header-standard,eltd-fixed-on-scroll,eltd-default-mobile-header,eltd-sticky-up-mobile-header,eltd-dropdown-default,wpb-js-composer js-comp-ver-5.2.1,vc_responsive

PHP Tutorial – Schritt 13: Suchen und Ersetzen

PHP kann mit dem Inhalt seiner Variablen ja sehr viel anstellen. Vor allem ist es auch möglich Werte zu suchen und zu ersetzen. Dies ist übrigens ebenfalls ein sehr mächtiges Feature von PHP, welches mir schon viele graue Haare gekostet hat. Du wirst später noch sehen warum.

|

Fangen wir mal mit etwas einfachem an, dem Suchen von einem gewissen Wort und dem Ersetzen desselbigen.

|

str_replace

Mit str_replace() kann man einfache Strings (Buchstabenfolgen) in Variablen suchen und ersetzen. Am besten ist immer wieder ein Beispiel, damit du mir Schritt für Schritt folgen kannst:

 

Ich ha|be bereits alles was du wissen und berücksichtigen musst als Kommentar im Skript hinterlegt. Das ist alles, was str_replace() macht (und kann). Man kann es auch etwas weiter treiben, gute Beispiele dafür findest du auf http://php.net/manual/de/function.str-replace.php

|

preg_replace

Der Befehl preg_replace() wurde von mir bis dato noch nie richtig verstanden. Wohl vielleicht auch weil er sehr komplex ist und vielleicht auch deswegen weil die Anleitungen dazu sehr schnell komplex werden. Ich hoffe ich schaffe es trotzdem, dir (und vor allem mir) diesen Befehl zu erklären, sodaß wir in Zukunft auch damit arbeiten können.

|

Der Befehl preg_replace() verwendet zum arbeiten reguläre Ausrücke. Wir werden im Zuge dieses Tutorials sehen, was das genau ist. Stützen möchte ich mich vor allem auf die Anleitung von Daniel Fett, sprich wir werden seine Beispiele nachbauen und testen. Das Rad muss wahrlich nicht stets neu erfunden werden!

|

Was wir als erstes verstehen müssen sind „Ausdrücke“

Die meisten Menschen haben ja Probleme mit Ausdrücke, von dem her soll uns das nicht weiter stören 🙂

|

Ein-Elementige reguläre Ausdrücke

Das Bahnhofsbeispiel von Daniel gefällt mir gut, wir orientieren uns ebenfalls an diesem. Ein Bahnhof mit 9 Gleisen soll geprüft werden, damit wir alle 9 Gleise prüfen können, schreiben wir die Gleisnummer in die eckige Klammer ([])

|

|

Allerdings kann somit stets nur ein Gleis geprüft werden, entweder Gleis 1, oder Gleis 4, oder Gleis 9. Man kann diese Schreibweise auch abkürzen, da es keine Ausnahme dazwischen gibt:

|

Soweit so gut. Gleis 4 ist nun allerdings gesperrt und soll nicht mehr unter die Prüfung fallen, sprich wir brauchen eine Ausnahme:

|

Es sind nun einfach die Bereiche aufgeteilt worden. In den Klammern steht stets jener Wert, der für den regulären Ausdruck relevant  ist. Man könnte auch schreiben:

|

So, nun ein kleines Kontrollbeispiel vom bis jetzt gelernten. Gleis 4 ist wieder geöffnet und wir noch drei weitere Gleise dazu, also bis Gleis 12:

Vorsicht: Dieser Code ist absichtlich falsch!

|

Durch die Eingabe [1-12] werden nicht, wie angenommen Gleis 1 bis Gleis 12 geprüft, sondern Gleis 1 bis 1 oder Gleis 2. Wie man das erweitert sehen wir uns später genauer an.

|

Mehrelementige reguläre Ausdrücke

Da fast jeder Bahnhof ein Gleis mit A und ein Gleis mit B vorzuweisen hat, wollen wir diese Bedingung nun in unserer Prüfung mit aufnehmen.

|

Durch diese Schreibweise ist es nun möglich Gleis 1a, Gleis 1b, Gleis 3d oder Gleis 8c usw. zu prüfen. Denn wie auch schon bei den Zahlen bedeutet die Schreibe [a-d], dass die Buchstaben a, b, c und d geprüft werden. Wichtig ist dabei auch, dass Groß- und Kleinschreibung sehr wohl eine Rolle spielen. Sprich z.B. Gleis 1A wird somit noch nicht geprüft. So aber sehr wohl:

|

Achtung: Dadurch ist es nun nicht mehr möglich nur Gleis 1 oder Gleis 4… zu prüfen. Es muss ein Klein- oder Großbuchstabe zusätzlich vorhanden sein, also z.B. Gleis1a oder Gleis 4C

|

Optionen für reguläre Ausdrücke

So… wenn du bis hierher durchgehalten hast, dann bin ich schon beeindruckt. Denn das ist zurzeit etwas graue Theorie und wird für das Verständnis des Befehls preg_replace() leider benötigt. Außerdem wirds jetzt noch etwas komplizierter:

|

In unserem vorherigen Beispiel wollten wir ja auch die Gleise 10, 11 oder 12 prüfen. Dies ging aber mit den vorherigen Abfragen nicht, da wir ja nur eine Ziffer und maximal noch einen zusätzlichen Buchstaben prüfen konnten.

|

Was aber, wenn unsere Gleise zwar Ziffern von 1 bis 9, aber nur einige einen zusätzlichen Buchstaben aufweisen? Also z.B. Gleis 1, Gleis 2, Gleis 3a, Gleis 3b usw?

|

Das Fragezeichen hinter einem Element (in diesem Fall [a-d]) bewirkt, dass dieses Element optional ist. Es kann also vorkommen, muss aber nicht. Dadurch sind nun folgende Abfragen möglich:

  • Gleis 1
  • Gleis 2
  • Gleis 3…
  • Gleis 1a
  • Gleis 1b
  • Gleis 2a

|

Jedoch nicht

  • Gleis 10
  • Gleis 11
  • Gleis 123
  • Gleis 1A
  • Gleis 4D

|

Für die Prüfung der einstelligen Gleisziffern mit Großbuchstaben müssen wir ein weiteres optionales Element hinzufügen:

|

Jetzt können wir auch folgende Gleise prüfen

  • Gleis 1
  • Gleis 2
  • Gleis 3…
  • Gleis 1a
  • Gleis 1b
  • Gleis 2a
  • Gleis 1A
  • Gleis 4D

|

Wichtig zu wissen: Durch diesen Code „[1-9][a-d]?[A-D]?“ hast du die Abfrage auf mindestens 1 Zeichen und maximal 3 Zeichen erweitert. Sprich erstes Zeichen muss eine Ziffer zwischen 1 und 9 sein, das zweite Zeichen ist optional und kann zwischen a und d liegen ODER zwischen A und D. Trifft letzteres zu, kann es kein 3tes Zeichen mehr geben, ansonsten kann dieses nur zwischen A und D liegen.

|

Und wenn du diesen letzten Hinweis und auch das Beispiel auf Anhieb verstanden hast, dann ziehe ich meinen imaginären Hut vor dir. Denn ich habs nicht kapiert, bevor ich es nicht selbst gesehen und geprüft habe. Deshalb werden wir jetzt ganz kurz ein Tool zur Hilfe nehmen, damit das verständlicher wird: http://regexpal.com/

|

RegExpal

Mit dem Tool RegExpal kannst du die Ausdrücke, die wir hier testen und lernen, gleich live ausprobieren. Ich zeige dir das kurz mit den bereits erwähnten Beispielen. Nach dem Öffnen der Url siehst du ein Fenster das in zwei Bereiche unterteilt ist:

|

regexpal_01

 

|

Im Bereich 1 kannst du deinen RegEx Code hinterlegen und Bereich 2 die jeweiligen „Test“-Daten. Der Rest passiert automatisch. In unserem Beispiel prüfe ich das gleich mal mit dem letzten RegEx Code den wir gelernt haben

|

Und im Testbereich hinterlege ich ein paar „Gleise“

|

Wenn du das eingegeben bzw. übernommen hast, dann wirst du womöglich so ein Ergebnis vorfinden:

regexpal_02

|

Was genau heißt das nun?

Im Prinzip heißt das, dass alle farblich hervor gehobenen Zeichen (gelb und blau wechselt sich zwecks Lesbarkeit ab) auf den RegEx Code zutreffen. Du siehst nun z.B. dass das Gleis „4C“ zutrifft, aber das Gleis „4Ca“ nicht, weil das 3te Zeichen ein Kleinbuchstabe ist. Unser Code möchte aber entweder eine Zahl, oder eine Zahl und einen Kleinbuchstaben optional mit einem Großbuchstaben, oder eine Zahl und einen Großbuchstaben.

|

Jetzt fällt dir vielleicht auf, dass auch die Zeilen „11a“, „11aB“ und „13Ac“ farblich aber blau und gelb hervorgehoben sind. Dies heißt, dass es hier zwei bzw. mehrere Treffer in einer Zeile gibt. Also nicht „11a“, sondern „1“ und „1a“ oder nicht „13Ac“ sondern „1“, „3“, „1A“ und „3A“.

|

Soweit noch klar?

Ich empfehle dir den RegEx Code zu ändern und zu beobachten, was passiert. z.B. ein Fragezeichen (?) entfernen, oder die Ziffern und Buchstaben zu ändern. Somit verstehst du die Codezusammensetzung viel schneller 😉

|

Aus Gründen der Übersichtlichkeit geht es im nächsten Beitrag weiter

Post a Comment