Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
RegEx: Zahlen aus String filtern [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
RegEx: Zahlen aus String filtern


 
MasterOfFreaks
14-11-2009, 21:28 
 
Hallo,

ich bin ein bisschen am verzweifeln. Ich versuche alle möglichen Zahlenkombinationen aus einem String zu filtern.

Mögliche Zahlenkombinationen:

Eingabe:
1 A 12 B 123.123 C 123,456 D 123.123,321 E 123 321 F


Mein momentaner Filterausdruck sieht so aus:


Filter:
preg_match_all("/[0-9]{1,10}[\,\.]?[0-9]*/u", $eingabe, $ausgabe);




Ausgabe:
Array ( [0] => Array ( [0] => 1 [1] => 12 [2] => 123.123 [3] => 123,456 [4] => 123.123 [5] => 321 [6] => 123 [7] => 321 ) )



Wie man sieht wird momentan noch die Zahl zerstückelt die mehrere Punkte oder Kommas enthält bzw. durch ein Leerzeichen getrennt wird. Kann jemand helfen, das diese Zahlenkombinationen nicht getrennt werden?

Viele Grüße
Master.of.Freaks

 
wahsaga
14-11-2009, 21:35 
 
Derzeit verlangst du in deinem Muster eine bis zehn Ziffern, dann optional einen Backslash oder ein Komma oder nochmal einen Backslash oder einen Punkt, und dann noch mal beliebig viele Ziffern.

Wenn du auch die Zahlen willst, in denen Komma oder Punkt mehrfach vorkommen können - dann passt du logischerweise dein Muster so an, dass es erst mal Ziffern verlangt, dann optional Ziffern oder Komma oder Punkt, und dann zum Abschluss noch mal Ziffern.

 
MasterOfFreaks
14-11-2009, 21:54 
 
Okay, wenn man das nochmal so geschrieben bekommt sieht man doch schon mal gleich klarer. Habe mein Filter nochmal angepasst:


preg_match_all("/[0-9]{1,}([\,\. ]?[0-9])*/u", $text, $ausgabe);



Array ( [0] => Array ( [0] => 1 [1] => 12 [2] => 123.123 [3] => 123,456 [4] => 123.123,321 [5] => 123 321 ) [1] => Array ( [0] => [1] => [2] => 3 [3] => 6 [4] => 1 [5] => 1 ) )


Array[0] sieht jetzt wirklich viel versprechend aus. Muss ich Array[1] als kollateral Schaden hinnehmen oder kann man den Filter noch weiter optimieren?

Viele Grüße
Master.of.Freaks

 
fireweasel
14-11-2009, 22:43 
 
Array[0] sieht jetzt wirklich viel versprechend aus. Muss ich Array[1] als kollateral Schaden hinnehmen oder kann man den Filter noch weiter optimieren?


?: (http://www.php.net/manual/en/regexp.reference.subpatterns.php) ist dein Freund.

Und das /u erscheint mir unpassend. Keines deiner Suchmuster braucht UTF-8-Kodierung (http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php).

 
MasterOfFreaks
14-11-2009, 23:00 
 
Super, alles klar, hier nochmal das ganze Beispiel:


preg_match_all("/[0-9]{1,}(?:[\,\. ]?[0-9])*/", $text, $ausgabe);


Der Unicode Modifier macht in dem Falle keinen Sinn, das stimmt.

Vielen Dank.

Viele Grüße
Master.of.Freaks

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:32 Uhr.