 |
09.09.2008, 10:04
|
#1 (permalink)
| | Stickstoff Junkie
Registriert seit: 02.02.2002 Ort: Jena
Beiträge: 3.678
| 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 ... | Fabian
News-Redakteur
[TweakPC Team] "Only wimps use tape backup: _real_ men just upload their important stuff
on ftp, and let the rest of the world mirror it" (Zitat Linus Torvalds) |
| |
09.09.2008, 16:55
|
#2 (permalink)
| | Blödmarktkundenberater
Registriert seit: 10.04.2002 Ort: Dresden
Beiträge: 9.041
| 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. PHP: preg_match_all - Manual | | |
| | | Für diesen Beitrag bedankt sich: | |
09.09.2008, 21:35
|
#3 (permalink)
| | Stickstoff Junkie
Registriert seit: 02.02.2002 Ort: Jena
Beiträge: 3.678
| 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. | | |
| |
09.09.2008, 21:42
|
#4 (permalink)
| | Blödmarktkundenberater
Registriert seit: 10.04.2002 Ort: Dresden
Beiträge: 9.041
| 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. | | |
| |
09.09.2008, 21:44
|
#5 (permalink)
| | Stickstoff Junkie
Registriert seit: 02.02.2002 Ort: Jena
Beiträge: 3.678
| 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. | | |
| |
09.09.2008, 21:56
|
#6 (permalink)
| | Die Kerrimaus
Registriert seit: 17.11.2003 Ort: bei Heidelberg
Beiträge: 2.987
| 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 | | |
| | | Für diesen Beitrag bedankt sich: | |
09.09.2008, 22:03
|
#7 (permalink)
| | Stickstoff Junkie
Registriert seit: 02.02.2002 Ort: Jena
Beiträge: 3.678
| 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. | | |
| |
09.09.2008, 23:27
|
#8 (permalink)
| | Bitte nicht füttern!
Registriert seit: 22.01.2002 Ort: Affenhaus
Beiträge: 10.440
| 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. | Webmaster / Forumadmin [TweakPC Team] "Das Ärgerlichste in dieser Welt ist, dass die Dummen todsicher und die Intelligenten voller Zweifel sind" Bertrand Russell - britischer Mathematiker und Philosoph (1872 - 1970) |
| |
10.09.2008, 07:57
|
#9 (permalink)
| | Blödmarktkundenberater
Registriert seit: 10.04.2002 Ort: Dresden
Beiträge: 9.041
| 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. | | |
| | | Für diesen Beitrag bedankt sich: | |
10.09.2008, 08:26
|
#10 (permalink)
| | Blödmarktkundenberater
Registriert seit: 10.04.2002 Ort: Dresden
Beiträge: 9.041
| 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); Alternativ geht auch: Code: preg_match_all('/[0-9]+/', $v, $reg); 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. | | |
| | | Für diesen Beitrag bedankt sich: | |
10.09.2008, 10:15
|
#11 (permalink)
| | Stickstoff Junkie
Registriert seit: 02.02.2002 Ort: Jena
Beiträge: 3.678
| AW: Regular Expression: Alles außer Zahlen Ah super, da fehlten dann die / ... was die nutzen, weiß ich zwar nicht, aber so funktionierts. Danke!!! | | |
| |
10.09.2008, 12:05
|
#12 (permalink)
| | Blödmarktkundenberater
Registriert seit: 10.04.2002 Ort: Dresden
Beiträge: 9.041
| AW: Regular Expression: Alles außer Zahlen Zitat:
Zitat von Fabian Ah super, da fehlten dann die / ... was die nutzen, weiß ich zwar nicht, aber so funktionierts. Danke!!! | 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 _all Funktion macht.
Kannst ja auch mal hier rein schauen: SELFHTML: Navigationshilfen / Suche
Da sind unter "Syntax regulärere Ausdrücke" die Schalter '/i' und '/g' beschrieben - bzw. geht natürlich auch '/gi'. | | |
| |
10.09.2008, 15:21
|
#13 (permalink)
| | Bitte nicht füttern!
Registriert seit: 22.01.2002 Ort: Affenhaus
Beiträge: 10.440
| AW: Regular Expression: Alles außer Zahlen Zitat:
Zitat von Exit So getestet und funktioniert: Code: $v = \\\",asd,22,123 kjhlasdh jkh as45 kljha sd\\\";
preg_match_all('/\d+/', $v, $reg);
var_dump($reg); Alternativ geht auch: Code: preg_match_all('/[0-9]+/', $v, $reg); 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. | 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! | | |
| |
10.09.2008, 15:23
|
#14 (permalink)
| | Bitte nicht füttern!
Registriert seit: 22.01.2002 Ort: Affenhaus
Beiträge: 10.440
| AW: Regular Expression: Alles außer Zahlen Zitat:
Zitat von Fabian Ah super, da fehlten dann die / ... was die nutzen, weiß ich zwar nicht, aber so funktionierts. Danke!!! | 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. | | |
| |  | |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | | | | Themen-Optionen | | | | Ansicht | Thema bewerten | Linear-Darstellung | |
Forumregeln
| Es ist dir erlaubt, neue Themen zu verfassen. Es ist dir erlaubt, auf Beiträge zu antworten. Es ist dir nicht erlaubt, Anhänge hochzuladen. Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten. HTML-Code ist aus. | | | Alle Zeitangaben in WEZ +1. Es ist jetzt 05:55 Uhr. | | |