Hilfe bei RegEx (preg_match_all)

jeipack

Erfahrenes Mitglied
Hi
Vorweg, ich habe nicht viel Erfahrung was RegEx anbelangt und benutze normalerweise http://txt2re.com/.
Nur hat http://txt2re.com/ ein paar Probleme mit Sonderzeichen.


Ich brauche aus folgendem String:
"BLahblah à 28 Stück"

Die Zahl und das letze Wort.

Dies funktioniert soweit ganz gut mit:
PHP:
if ($c=preg_match_all ("/.*?(\\d+).*?((?:[a-z][a-zöäü]+))/is", $text, $matches)) {
	$zahl=$matches[1][0];
	$wort=$matches[2][0];
}

Wie gesagt, der Regex hat http://txt2re.com/ aufgebaut, von mir sind nur die öäü. Nun können aber auch völlig andere Sonderzeichen vorkommen. Z. B. è,à,ç und so weiter.

Meine Idee war `((?:[a-z][a-zöäü]+))`durch `((?:[a-z][\S]+))`zu ersetzen.


Meine Frage an euch ist nun, ob ich damit durchkomme oder ob es Fälle geben könnte wo dann was falsch läuft?


Gruss
jeipack
 
Oh, die txt2re-Eite ab der ich noch nie schlau wurde. Keine Ahnung was diese mir so anzeigt.

Ich gehe lieber auf eine Testumgung
http://regexp-evaluator.de/evaluator/a7790ba1eaeebc657fdf12f8127c2b4b/#ergebnis
Und da haben meine Tests ergeben:
Code:
/(\d+) ([\wäöü]+)$/i
Beginnen wir von hinten:
$: Ende des Strings
([\wäöü]+): Mindestens ein Wortzeichen \w oder ein äöü
: Dann ein Leerzeichen
(\d+): Mindestens eine Ziffer

Wenn du nastelle von einem Wort einfach ader Letzte Teil nach einem Leerzeichen haben willst, dann sieht es noch einfacher aus
Code:
/(\d+) (\S+)$/i
wobei \S für alles ausser Leerzeichen/Zielenumbrüche etc. steht.

Dein Pattern lässt zwischen Zahl und Wort alles mögliche zu. Ach am Ende des Wortes kann noch kommen was will.

Nachtrag zu deinem Beispiel
Code:
\\d+
bedeutet, ein \ gefolgt von einem d. Es wird also nach dem String '\d' gesucht. Ansonsten müsstest du das doppelte \\ durch ein einfaches \ ersetzen.
 
Die text2re Seite ist eigentlich recht genial, gib ihr eine zweite Chance ;)

Dass bei `\\d+` der Backslash escaped würde, ergibt zwar Sinn, aber der RegEx den ich gepostet habe funktioniert so, also kann das so nicht ganz stimmen.

`[\wäöü]+`bringt mir nicht so viel, soweit war ich ja auch schon: `[a-zöäü]+`. Es geht da ja eben darum, dass auch völlig andere Sonderzeichen vorkommen können (Der String der geparst wird kann auch französisch sein)

So.. hmm ich schaue mir dein Posting aber am Wochenende nochmals genauer an und versuche dann auch meinen RegEx oben vollständig selbst zu verstehen.


Gruss
 
Zurück