![]() |
Regular Expression: Alles außer Zahlen Hallo, ich möchte aus einem String wie zum Beispiel ",asd,22,123 kjhlasdh jkh as45 kljha sd" gerne alle Zahlen herausfiltern und in einem Array erhalten. Sprich am Ende sollten dann 22, 123 und 45 in einem Array stehen. Dies sollte ja mit preg_split in PHP möglich sein. Nur finde ich die richtige Regular Expression nicht. preg_split("([0-9])",$string, -1, PREG_SPLIT_NO_EMPTY); Liefert mir gerade als Ergebnis alle anderen Teile, die an den Zahlen getrennt wurden, aber wie kann ich einen RegEx negieren? Ich bräuchte ja "Trenne an allen Zeichen außer Zahlen". Danke schonmal ... |
AW: Regular Expression: Alles außer Zahlen Eigentlich müsste das Regex Pattern so aussehen: "[0-9]+" - alternativ geht auch die einfachere Version "\d+" die explizit alle Zahlen sucht - und Du ja auch keine Beschränkung hast. Damit bekommst Du nur die Zahlen - egal was davor oder dahinter steht. In dem Eingabestring ",asd,22,123 kjhlasdh jkh as45 kljha sd" werden die Einträge "22", "123" und "45" gefunden. Das "+" bei "[0-9]+" ist notwendig, damit Du die volle Zahl findest. Ohne das Plus (also nur "[0-9]") werden ansonsten die Zahlen "2", "2", "1", "2", "3", "4", "5" gefunden - also jede Zahl allein. Es kann sein, dass Deine zusätzliche PHP Logik auch schon spezielle Sachen filtert - bzw. ändert. Das kann ich aber nicht bewerten, da ich mich nicht in PHP auskenne. Ich habe aber mal ein bisschen geschaut und dabei diesen Befehl gefunden: "preg_match_all" Hier ist der beschrieben - und er sollte eigentlich das machen, was Du möchtest. [URL="http://www.php.net/manual/de/function.preg-match-all.php"]PHP: preg_match_all - Manual[/URL] |
AW: Regular Expression: Alles außer Zahlen Hi, erstmal vielen Dank! preg_match_all hilft nur leider nicht, weil er nach einer fixen Zeichenkette und keiner RegEx sucht - zumindest so wie ich es zur Zeit verwende. |
AW: Regular Expression: Alles außer Zahlen Laut dem von mir geschickten Link sollte er aber eigentlich Regex machen - und keine fixen Zeichenketten - zumindest ist das Beispiel auf der Seite auf jeden Fall ein Regex Suchpattern. |
AW: Regular Expression: Alles außer Zahlen Jo ... das hatte ich auch gedacht, aber ich habe es gerade ausprobiert und es geht nicht. Nuja, vielleicht habe ich noch irgendwas falsch gemacht ... mal sehen. |
AW: Regular Expression: Alles außer Zahlen Hmm, im Grunde kann ich Dir nicht so wirklich weiterhelfen, hab aber trotzdem eine kleine Idee ;) Muss es effizient und elegant sein? Dann lies besser nicht weiter ;) Es gibt sicher eine Suchen-und-Ersetzen-Funkltion in php. Ersetze mit der alle Zeichen, die keine Zahl sind, durch Leerzeichen. Anschliessend ersetzt Du ein oder mehrere Leerzeichen in Folge durch ein einzelnes Komma. in Schritt drei teilst Du den ganzen String dann an den Kommas auf. Definitiv nicht elegent, auch nicht effizient, aber koennte funktionieren ;) Gruesslies, Kerri |
AW: Regular Expression: Alles außer Zahlen Danke, aber ein wenig effizient sollte es schon sein. Nein um ehrlich zu sein, sollte es sogar sehr effizient sein - ich überlege schon fast, ob ich mir den Aufwand mit den RegExs mache oder ob nicht ein einfaches explode an festen Zeichen genügt und man den Rest später abfängt. |
AW: Regular Expression: Alles außer Zahlen andere Möglichkeit, durchlaufen den String von vorne nach hinten bis einer Zahl kommt, dann füge diese und alle folgenden Zahlen in array[x] bis keine zahl kommt. erhöhe x um eins und weiter von vorn. vom speed her dürfte das schneller sein als der komplexe algo für die regulären ausdrücke etc. und man spart sich auch noch das anschließende explode. |
AW: Regular Expression: Alles außer Zahlen Wenn mein Arbeitskollege heute kommt, werde ich mich mal mit ihm kurzschließen. Der hat PHP auf seinem Rechner drauf, weil er momentan an nem PHP Webprojekt arbeitet. Der sollte sich recht gut auskennen, sodass wir Dein Problem mal schnell nachtstellen und testen können. |
AW: Regular Expression: Alles außer Zahlen So getestet und funktioniert: [code]$v = \",asd,22,123 kjhlasdh jkh as45 kljha sd\"; preg_match_all('/\d+/', $v, $reg); var_dump($reg);[/code] Alternativ geht auch: [code]preg_match_all('/[0-9]+/', $v, $reg);[/code] Die normalen "ereg" bzw. "eregi" Funktionen von PHP scheinen aber scheinbar ein Problem mit der Schreibweise "\d" zu haben - denn dann kommt nur Müll raus. Dort wird scheinbar nur die Schreibweise "[0-9]" bei Zahlen unterstützt - sah zumindest so aus. "preg_match_all" unterstützt aber laut unserem Test beide Schreibweisen. |
AW: Regular Expression: Alles außer Zahlen Ah super, da fehlten dann die / ... was die nutzen, weiß ich zwar nicht, aber so funktionierts. Danke!!! |
AW: Regular Expression: Alles außer Zahlen [quote=Fabian;571180]Ah super, da fehlten dann die / ... was die nutzen, weiß ich zwar nicht, aber so funktionierts. Danke!!![/quote] Die '/.../' dienen eigentlich dazu um den Regex String zu begrenzen. Dahinter kann man nämlich noch ein paar Regex Optionen setzen. Zum Beispiel '/.../i' um Groß- und Kleinschreibung zu ignorieren. '/.../g' müsste dafür sorgen, dass alle Treffer gefunden werden - also das PHP über die spezielle preg_match[B]_all[/B] Funktion macht. Kannst ja auch mal hier rein schauen: [url=http://de.selfhtml.org/navigation/suche/index.htm?Suchanfrage=regex]SELFHTML: Navigationshilfen / Suche[/url] Da sind unter "Syntax regulärere Ausdrücke" die Schalter '/i' und '/g' beschrieben - bzw. geht natürlich auch '/gi'. |
AW: Regular Expression: Alles außer Zahlen [quote=Exit;571158]So getestet und funktioniert: [code]$v = \\\",asd,22,123 kjhlasdh jkh as45 kljha sd\\\"; preg_match_all('/\d+/', $v, $reg); var_dump($reg);[/code]Alternativ geht auch: [code]preg_match_all('/[0-9]+/', $v, $reg);[/code]Die normalen \\"ereg\\" bzw. \\"eregi\\" Funktionen von PHP scheinen aber scheinbar ein Problem mit der Schreibweise \\"\d\\" zu haben - denn dann kommt nur Müll raus. Dort wird scheinbar nur die Schreibweise \\"[0-9]\\" bei Zahlen unterstützt - sah zumindest so aus. \\"preg_match_all\\" unterstützt aber laut unserem Test beide Schreibweisen.[/quote] Dazu kann ich was beisteuern ^^ Ich habe letzens festgestellt, dass ereg und eregi nicht die gleiche Syntax benutzen wie preg_match. preg_match benutzt die gängige Perl Syntax für Regexp, wogegen ereg eine eigene php spezielle hat oder so. preg_match soll auch schneller sein! |
AW: Regular Expression: Alles außer Zahlen [quote=Fabian;571180]Ah super, da fehlten dann die / ... was die nutzen, weiß ich zwar nicht, aber so funktionierts. Danke!!![/quote] Das "/" sind die Anfangs und Endkennung die in der Perl Syntax benutzt werden. Musst du dir mal Perl Regexp angucken genauso kann man da jedes andere zeichen benutzen. |
| Alle Zeitangaben in WEZ +1. Es ist jetzt 07:49 Uhr. |
Powered by vBulletin® Version 3.8.10 (Deutsch)
Copyright ©2000 - 2026, vBulletin Solutions, Inc.
SEO by vBSEO 3.5.2 ©2010, Crawlability, Inc.