Reguläre Ausdrücke (RegEx): Unterschied zwischen den Versionen
Aus Wikizone
| 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 | + | 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: | * \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!" );