TweakPC

Zurück   Computer Hardware Forum - TweakPC > Games und Software > Programmiersprachen

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 09.09.2008, 11:04   #1 (permalink)
Stickstoff Junkie
 
Benutzerbild von Fabian
 

Registriert seit: 02.02.2002
Beiträge: 3.678

Fabian ist ein wunderbarer AnblickFabian ist ein wunderbarer AnblickFabian ist ein wunderbarer AnblickFabian ist ein wunderbarer AnblickFabian ist ein wunderbarer AnblickFabian ist ein wunderbarer Anblick

Standard 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 ist offline   Mit Zitat antworten
Alt 09.09.2008, 17:55   #2 (permalink)
Blödmarktkundenberater
 
Benutzerbild von Exit
 

Registriert seit: 10.04.2002
Beiträge: 10.661

Exit hat eine strahlende Zukunft
Exit hat eine strahlende ZukunftExit hat eine strahlende ZukunftExit hat eine strahlende ZukunftExit hat eine strahlende ZukunftExit hat eine strahlende Zukunft

Standard 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
Power is nothing without Control!
Hauptsystem
Exit ist offline   Mit Zitat antworten
Für diesen Beitrag bedankt sich:
Fabian (09.09.2008)
Alt 09.09.2008, 22:35   #3 (permalink)
Stickstoff Junkie
 
Benutzerbild von Fabian
 

Registriert seit: 02.02.2002
Beiträge: 3.678

Fabian ist ein wunderbarer AnblickFabian ist ein wunderbarer AnblickFabian ist ein wunderbarer AnblickFabian ist ein wunderbarer AnblickFabian ist ein wunderbarer AnblickFabian ist ein wunderbarer Anblick

Standard 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.
Fabian ist offline   Mit Zitat antworten
Alt 09.09.2008, 22:42   #4 (permalink)
Blödmarktkundenberater
 
Benutzerbild von Exit
 

Registriert seit: 10.04.2002
Beiträge: 10.661

Exit hat eine strahlende Zukunft
Exit hat eine strahlende ZukunftExit hat eine strahlende ZukunftExit hat eine strahlende ZukunftExit hat eine strahlende ZukunftExit hat eine strahlende Zukunft

Standard 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.
Exit ist offline   Mit Zitat antworten
Alt 09.09.2008, 22:44   #5 (permalink)
Stickstoff Junkie
 
Benutzerbild von Fabian
 

Registriert seit: 02.02.2002
Beiträge: 3.678

Fabian ist ein wunderbarer AnblickFabian ist ein wunderbarer AnblickFabian ist ein wunderbarer AnblickFabian ist ein wunderbarer AnblickFabian ist ein wunderbarer AnblickFabian ist ein wunderbarer Anblick

Standard 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.
Fabian ist offline   Mit Zitat antworten
Alt 09.09.2008, 22:56   #6 (permalink)
Die Kerrimaus
 
Benutzerbild von kerri
 

Registriert seit: 17.11.2003
Beiträge: 2.987

kerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz sein

Standard 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
kerri ist offline   Mit Zitat antworten
Für diesen Beitrag bedankt sich:
Fabian (09.09.2008)
Alt 09.09.2008, 23:03   #7 (permalink)
Stickstoff Junkie
 
Benutzerbild von Fabian
 

Registriert seit: 02.02.2002
Beiträge: 3.678

Fabian ist ein wunderbarer AnblickFabian ist ein wunderbarer AnblickFabian ist ein wunderbarer AnblickFabian ist ein wunderbarer AnblickFabian ist ein wunderbarer AnblickFabian ist ein wunderbarer Anblick

Standard 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.
Fabian ist offline   Mit Zitat antworten
Alt 10.09.2008, 00:27   #8 (permalink)
Bitte nicht füttern!
 
Benutzerbild von Robert
 

Registriert seit: 22.01.2002
Beiträge: 15.724

Robert kann auf vieles stolz seinRobert kann auf vieles stolz seinRobert kann auf vieles stolz seinRobert kann auf vieles stolz seinRobert kann auf vieles stolz seinRobert kann auf vieles stolz seinRobert kann auf vieles stolz seinRobert kann auf vieles stolz seinRobert kann auf vieles stolz sein

Standard 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]
"It is far easier to concentrate power than to concentrate knowledge." Thomas Sowell
Robert ist offline   Mit Zitat antworten
Alt 10.09.2008, 08:57   #9 (permalink)
Blödmarktkundenberater
 
Benutzerbild von Exit
 

Registriert seit: 10.04.2002
Beiträge: 10.661

Exit hat eine strahlende Zukunft
Exit hat eine strahlende ZukunftExit hat eine strahlende ZukunftExit hat eine strahlende ZukunftExit hat eine strahlende ZukunftExit hat eine strahlende Zukunft

Standard 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.
Exit ist offline   Mit Zitat antworten
Für diesen Beitrag bedankt sich:
Fabian (10.09.2008)
Alt 10.09.2008, 09:26   #10 (permalink)
Blödmarktkundenberater
 
Benutzerbild von Exit
 

Registriert seit: 10.04.2002
Beiträge: 10.661

Exit hat eine strahlende Zukunft
Exit hat eine strahlende ZukunftExit hat eine strahlende ZukunftExit hat eine strahlende ZukunftExit hat eine strahlende ZukunftExit hat eine strahlende Zukunft

Standard 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.
Exit ist offline   Mit Zitat antworten
Für diesen Beitrag bedankt sich:
Fabian (10.09.2008)
Alt 10.09.2008, 11:15   #11 (permalink)
Stickstoff Junkie
 
Benutzerbild von Fabian
 

Registriert seit: 02.02.2002
Beiträge: 3.678

Fabian ist ein wunderbarer AnblickFabian ist ein wunderbarer AnblickFabian ist ein wunderbarer AnblickFabian ist ein wunderbarer AnblickFabian ist ein wunderbarer AnblickFabian ist ein wunderbarer Anblick

Standard AW: Regular Expression: Alles außer Zahlen

Ah super, da fehlten dann die / ... was die nutzen, weiß ich zwar nicht, aber so funktionierts. Danke!!!
Fabian ist offline   Mit Zitat antworten
Alt 10.09.2008, 13:05   #12 (permalink)
Blödmarktkundenberater
 
Benutzerbild von Exit
 

Registriert seit: 10.04.2002
Beiträge: 10.661

Exit hat eine strahlende Zukunft
Exit hat eine strahlende ZukunftExit hat eine strahlende ZukunftExit hat eine strahlende ZukunftExit hat eine strahlende ZukunftExit hat eine strahlende Zukunft

Standard AW: Regular Expression: Alles außer Zahlen

Zitat:
Zitat von Fabian Beitrag anzeigen
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'.
Exit ist offline   Mit Zitat antworten
Alt 10.09.2008, 16:21   #13 (permalink)
Bitte nicht füttern!
 
Benutzerbild von Robert
 

Registriert seit: 22.01.2002
Beiträge: 15.724

Robert kann auf vieles stolz seinRobert kann auf vieles stolz seinRobert kann auf vieles stolz seinRobert kann auf vieles stolz seinRobert kann auf vieles stolz seinRobert kann auf vieles stolz seinRobert kann auf vieles stolz seinRobert kann auf vieles stolz seinRobert kann auf vieles stolz sein

Standard AW: Regular Expression: Alles außer Zahlen

Zitat:
Zitat von Exit Beitrag anzeigen
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!
Robert ist offline   Mit Zitat antworten
Alt 10.09.2008, 16:23   #14 (permalink)
Bitte nicht füttern!
 
Benutzerbild von Robert
 

Registriert seit: 22.01.2002
Beiträge: 15.724

Robert kann auf vieles stolz seinRobert kann auf vieles stolz seinRobert kann auf vieles stolz seinRobert kann auf vieles stolz seinRobert kann auf vieles stolz seinRobert kann auf vieles stolz seinRobert kann auf vieles stolz seinRobert kann auf vieles stolz seinRobert kann auf vieles stolz sein

Standard AW: Regular Expression: Alles außer Zahlen

Zitat:
Zitat von Fabian Beitrag anzeigen
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.
Robert ist offline   Mit Zitat antworten
Antwort

Stichworte
expression, expression:, regular, zahlen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist aus.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Was gibt es außer Kabelanschluss? Paul K. Kaufberatung 14 15.06.2010 17:07
[Netzwerk]Alles geht, außer Zocken sk8er_boy_2004 Netzwerk 5 18.05.2007 14:34
Microsoft mit Patch-Day außer der Reihe TweakPC: News News 2 21.04.2006 18:14
Aufwärmzeit beim Epson Expression 1680 Gast Sonstige Hardware 0 11.06.2004 10:08


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:23 Uhr.






Powered by vBulletin® Version 3.8.10 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
SEO by vBSEO 3.5.2 ©2010, Crawlability, Inc.
Impressum, Datenschutz Copyright © 1999-2015 TweakPC, Alle Rechte vorbehalten, all rights reserved