Reguläre Ausdrücke (RegEx): Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
Zeile 43: Zeile 43:
 
Quelle s.o. bei Links
 
Quelle s.o. bei Links
  
Angenommen es sollen alle Sonderzeichen aus dem Satz “Grüß mich, sonst gibt’s Ärger!” entfernt und durch Leerzeichen ersetzt werden.  
+
Angenommen es sollen alle '''Sonderzeichen''' aus dem Satz “Grüß mich, sonst gibt’s Ärger!” entfernt und durch Leerzeichen ersetzt werden.  
  
 
  preg_replace('/\W/', ' ', "Grüß mich, sonst gibt's Ärger!" )
 
  preg_replace('/\W/', ' ', "Grüß mich, sonst gibt's Ärger!" )
Zeile 54: Zeile 54:
 
  preg_replace('/\W/u', ' ', "Grüß mich, sonst gibt's Ärger!" );
 
  preg_replace('/\W/u', ' ', "Grüß mich, sonst gibt's Ärger!" );
  
* Der /u Modifier sagt, daß jetzt utf-8 kommt.
+
* Der /u Modifier sagt, daß jetzt '''utf-8''' kommt.
  
Das funktioniert in Windows nicht aber in Linux. Dort zählen die Umlaute nicht zu den Buchstaben (\W) und werden entfernt. Das behebt ein Modifier:
+
Das funktioniert in Windows nicht aber in Linux. Dort zählen die '''Umlaute''' nicht zu den Buchstaben (\W) und werden entfernt. Das behebt der Modifier \pL
 
 
echo preg_replace('/\[^\pL]/u', ' ', "Grüß mich, sonst gibt's Ärger!" );
 
  
 
* \pL steht für Zeichen jeder Sprache. Das \W wird ersetzt durch:  
 
* \pL steht für Zeichen jeder Sprache. Das \W wird ersetzt durch:  
Zeile 65: Zeile 63:
  
 
  [^\pL] -> Suche alles was kein (^) Buchstaben jeglicher Sprache (\pL) ist
 
  [^\pL] -> Suche alles was kein (^) Buchstaben jeglicher Sprache (\pL) ist
 +
 +
'''Ergebnis:'''
 +
 +
echo preg_replace('/\[^\pL]/u', ' ', "Grüß mich, sonst gibt's Ärger!" );

Version vom 10. Dezember 2012, 19:17 Uhr

Links

http://www.regular-expressions.info/reference.html

http://weppz.com/tipps/preg_replace-utf-8-und-umlaute/

Kurzübersicht

Für Such- und Ersetzungsfunktionen mit preg_replace, preg_match etc.

/ oder # müssen an anfang und ende!

. entspricht einem beliebigen Zeichen ( also Buchstaben,Zahlen,sonderzeichen,bindestriche,usw.).
+ entspricht anzahl >= 1
.+ entspricht mehreren beliebigen Zeichen
* entspricht anzahl >= 0
.* entspricht kein oder mehrere beliebigen Zeichen
? entspricht einem Zeichen
.? entspricht kein oder ein beliebiges Zeichen
| entspricht der OR bzw. ODER Verknüpfung
^ entspricht zweierlei: einmal der NOT bzw. NICHT Verknüpfung(aber nur in der [] klammer) und anderesmal, dass das folgende zeichen am anfang stehen muss.

alle oben genannten zeichen müssen als echte zeichen mit dem \ maskiert werden, also z.B. \. entspricht dann dem .



\w entspricht einem Buchstabe
\w+ entsprcht mehreren (oder einem) Buchstaben
\d entspricht einer Zahl
\d+ entspricht mehreren (oder einer) Zahlen

() entspricht einer Gruppe, wird also gespeichert. Die Erste Gruppe kann nachher bei preg_replace im replacement als $1 angegeben werden, die zweite als $2 usw.
(\w+) entspricht mehreren gespeicherten Buchstaben
[] entspricht einem Bereich
[a-z] entspricht den kleinen Buchstaben a bis z
[A-Z] entspricht den grossen Buchstaben A bis Z

Beispiel Umlaute und Sonderzeichen

Quelle s.o. bei Links

Angenommen es sollen alle Sonderzeichen aus dem Satz “Grüß mich, sonst gibt’s Ärger!” entfernt und durch Leerzeichen ersetzt werden.

preg_replace('/\W/', ' ', "Grüß mich, sonst gibt's Ärger!" )
  • Innerhalb / / steht der reguläre Ausdruck nach dem Gesucht wird.
  • \W steht für "nicht Buchstabe" (also alles andere soll ersetzt werden)

Probleme gibt es bei utf-8 als Zeichensatz. Deshalb:

preg_replace('/\W/u', ' ', "Grüß mich, sonst gibt's Ärger!" );
  • Der /u Modifier sagt, daß jetzt utf-8 kommt.

Das funktioniert in Windows nicht aber in Linux. Dort zählen die Umlaute nicht zu den Buchstaben (\W) und werden entfernt. Das behebt der Modifier \pL

  • \pL steht für Zeichen jeder Sprache. Das \W wird ersetzt durch:
  • [ ] -> In den Brakets steht eine Charakterklasse
  • ^ -> steht für nicht
[^\pL] -> Suche alles was kein (^) Buchstaben jeglicher Sprache (\pL) ist

Ergebnis:

echo preg_replace('/\[^\pL]/u', ' ', "Grüß mich, sonst gibt's Ärger!" );