EisFuX: PCRE/preg_replace()

Beitrag lesen

Hallo Ariane,

Ich habe einen String welcher aus Zahlen, Buchstaben und Sonderzeichen besteht und möchte nun aus diesem String alle Leerzeichen und Sonderzeichen entfernen.

  
$alt = 'blablubb123456+#+*ÄÖüß:';  
  
$neu = preg_replace('/[^[:alnum:]]/', '', $alt);  
  
print($neu);  

Die mittlere Zeile ersetzt alles, was PHP nicht als Buchstaben oder Ziffern anerkennt, mit einem Leerstring. Es werden also damit alle "Nicht-Buchstaben" und alle "Nicht-Ziffern" gelöscht.

Ich hatte mir nun vorgestellt, dass ich jedes einzelne Zeichen des Strings prüfe ob es in einem von mir festgelegten Array (bestehend aus den Buchstaben a-z und den Zahlen 0-9) vorkommt, falls ja bleibt das Zeichen im String, falls nein wird es entfernt.

Willst du nun alle Buchstaben behalten oder nur die kleinen Buchstaben von a bis z? Falls du letzeres vorhattest, dann geht das so:

  
$neu = preg_replace('/[^a-z0-9]/', '', $alt);

Der Befehl preg_replace() arbeitet mit so genannten regulären Ausdrücken (hier PCRE). Das sind die wirren Zeichen, die im ersten Parameter zwischen den Schräg-Strichen stehen. Die zu erklären, ist nicht ganz einfach. Sie geben eine Art Suchmuster an, nach dem im $alt gesucht werden soll, und wenn was gefunden wurde, wird es im Falle von preg_replace() ersetzt. Es gibt in PHP aber noch eine ganze Familie von weiteren preg-Befehlen. Mit denen kann man nach Mustern suchen, Zeichenketten nach Mustern teilen und noch vieles mehr ... Aber dazu muss man eben diese "RegEx-Muster-Sprache" lernen. Leider sind die wenigsten Web-Seiten zu dem Thema einsteigerfreundlich, da hilft nur Lernen-durch-Üben.

Wikibook zu PCRE mit PHP

http://www.tote-taste.de/X-Project/regex/ (englisch)

PCRE-Evaluator-Tutorial

PHP-Resource.de PCRE-Tutorial

MffG
EisFuX

--
Auch meine Hosenträger sind intelligent, in dem Sinne, dass man sie regulieren kann. Sie besitzen ein adaptives Verhalten.
Stanisław Lem