PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : regexp



elrond
02-03-2007, 08:41
Hallo allerseits,ich bin gerade dabei an einer sicherlich ganz einfachen sache zu scheitern...: Ich versuche in einem string alle zeichen zu entfernen, die nicht diesem Ausdurck entsprechen:
/^[\w|\s|\d|\.|\,]+$/

irgendwie stell ich mich zu blöd an :mad: Für nen tipp wäre ich dankbar.

cu el

Thomas Engelke
02-03-2007, 16:31
Na dann:

s/[^a-zA-Z0-9\r\n\t.,]//g

Innerhalb einer Aufzählung (die du mittels der eckigen Klammern eröffnest), verlieren alle Abkürzungen (z.B. \w) ihre Sonderbedeutung. Deshalb also für

\w a-zA-Z0-9 (\w beinhaltet "word characters", darunter fallen auch die Zahlen)
\r\n\t für dein \s (Whitespace-Charaktere)
. für deinen Punkt (verliert auch seine Spezialeigenschaften)
, dasselbe

Ansonsten hast du noch darauf bestanden, daß dein gesamter String aus diesen Zeichen besteht, wo du doch einfach nur alle ersetzen wolltest :)

Je nach Regeln könnte dies ggf. ein wenig abweichen, mein Wissen stammt nicht direkt aus PHP. Hoffe, daß die da nicht viel anders implementieren als Perl.

TME

undefined
03-03-2007, 06:34
Das Zirkumflex muß innerhalb der Klammer Stehen wenn du negieren möchtest. Die oder Anweisungen kannst du dir Sparen weil [] irgendeines dieser Zeichen bedeutet. Wenn du ein ODER also Pipe Zeichen verwendest würde der Regexp bei dem ersten Treffer beenden, es wäre zudem ein Gierige Regexp weil jeder ODER innerhalb eines Ausdrucks einen neuen Stack aufmacht ;)

preg_replace( "/[^\w\.\, ]+/", "", $str );
Übersetzt :
Suche alle nicht Alnum,Leerzeichen,Punkt, Komma und eines dieser nicht vorhandenen Zeichen muß mindestens einmal kann aber mehrfach vorkommen.
Wenn es ein UTF-8 String ist, vergiß bitte nicht das u Flag zu setzen.

Info:
\s ist bei PHP je nach Kodierung Problematisch, du solltest hier einfach ein Leerzeichen verwenden.

Turbohummel
03-03-2007, 07:27
Würde ein "str_replace" den Zweg nicht auch erfüllen?

Romanday
04-03-2007, 17:49
Würde ein "str_replace" den Zweg nicht auch erfüllen?

Ne, das klappt nicht weil str_replace keine Regulären Ausdrücke versteht.
Anders ausgedrückt: Du müßtest sehr oft str_replace() nacheinander benutzen um den selben Effekt zu erzielen.

Nehmen wir einmal an Du möchtest die Buchstaben a b c D e ersetzen.
Dies bedeutet 5x str_replace() benutzen.

Würdest Du jetzt die passende Regex Funktion anwenden entspricht dies nur einem Ausdruck.
Bei 5 verschiedenen Zeichen mag das noch mit str_replace() zu lösen sein,
aber was machst Du wenn 300 verschiedene Zeichen ersetzt werden müssen?

elrond
05-03-2007, 07:20
Danke euch allen, ich komme leider erst jetzt dazu mich des problems wieder anzunehmen...

gruss el