ERLEDIGT
JA
JA
ANTWORTEN
25
25
ZUGRIFFE
938
938
EMPFEHLEN
-
Hallo zusammen,
evtl kann mir einer helfen und sagen ob sowas in Regex überhaupt möglich ist.
Folgenden text hab ich als Beispiel
formel(test1:test2:test3)
nun möchte ich via regex jeden einzelnen Teil rauslesen.
wäre der Text wie folgt:
test1:test2:test3
könnte ich das ganz einfach mit (.*?):+|(.*?)$
machen, allerdings hab ich dann 3 Gruppen.
Ausserdem ist in dem Beispiel dann der formel() teil auch nicht enthalten und ich kann mir leider nicht mehr helfen.
Vielleicht kennt ja einer eine möglichkeit wie ich das Pattern schreiben muss um folgendes Ergebniss zu erhalten wenn ich folgenden Wert übergebe.
formel(test1:test2:test3)
return bsp. [test1,test2,test3] < array
viele Grüße
StephanMoep :)
-
Versuch mal das hier:
Code :1
.*\((.*):(.*):(.*)\)
Bei Problemen mit Codes, postet bitte den entsprechenden Codeausschnitt und setzt den in entsprechende Tags.
( [cpp] [/cpp] [css] [/css] [html] [/html] [java] [/java] [javascript] [/javascript] [php] [/php] [sql] [/sql] )
"Funktioniert nicht" ist keine Fehlermeldung. Bitte eine genaue Fehlerbeschreibung und, wenn vorhanden, Fehlermeldungen posten.
RegEx Tutorial
PHP Funktionsreferenz
-
Oh hab natürlich wieder ein wichtiges Detail vergessen....
Der Wert in den Klammern soll natürlich unendlich sein *g*
formel(a,b,c,d,N)
Ich mein natürlich könnte ich hergehen und das ganze mit 2 durchläufen machen aber das will ich ja erstmal nicht.
allein die Tatsache das folgendes nicht das bringt was man glauben mag :
formel(test1:test2:test3)
regex =
formel\((.*?):+\)
Geändert von SonicBe@m (23.06.10 um 12:55 Uhr)
Moep :)
-
Ich glaube hier wäre es einfacher, den Teil aus der Klammer zu holen und ihn dann mit split in ein Array aufzuteilen.
Bei Problemen mit Codes, postet bitte den entsprechenden Codeausschnitt und setzt den in entsprechende Tags.
( [cpp] [/cpp] [css] [/css] [html] [/html] [java] [/java] [javascript] [/javascript] [php] [/php] [sql] [/sql] )
"Funktioniert nicht" ist keine Fehlermeldung. Bitte eine genaue Fehlerbeschreibung und, wenn vorhanden, Fehlermeldungen posten.
RegEx Tutorial
PHP Funktionsreferenz
-
Moep :)
-
23.06.10 13:11 #6Code :
1 2 3
abc:def:ghi:jkl (:([^:]*))
? Ergebnis im array[2] ?
mfg chmee
p.s.: Naja, fast, aber etwa so einfach müsste die Sache lösbar sein
Es geht sicherlich noch schöner, denn Felder [0], [n] und [n-1] bleiben leer.Code :1 2 3
(abc:def:ghi:jkl) (:?)([^:()]*)
Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
Benutzt den DANKE-Knopf oder bewertet den Beitrag
"GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
-> Regexp <- -> php <- -> Javascript <-
-
uff ehm Ja sehr cool!

Kannste mal erklären was da jetzt genau passiert? ich blick da grad nicht durch
somit wäre dann auch das 2te Array weg.Code :1
PS: (?::?)([^:()]*)
Ist es jetzt hier eigentlich möglich das formel() noch mit in das pattern zu nehmen welches dann rausgeworfen wird? also sowas wie
Code :1
formel\((?::?)([^:()]*)\)
Geändert von SonicBe@m (23.06.10 um 13:25 Uhr)
Moep :)
-
23.06.10 13:26 #8
Das erste ist recht einfach, ich gruppiere das Suchpattern
mehrere[nicht:]).. Das zweite ist nur die Erweiterung des Nicht mit () Klammer auf und zu.
Studierfeld erster Wahl ist natürlich http://www.regex-tester.de/regex.html
mfg chmeeMein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
Benutzt den DANKE-Knopf oder bewertet den Beitrag
"GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
-> Regexp <- -> php <- -> Javascript <-
-
23.06.10 14:10 #9
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Nein, das geht nicht (vorausgesetzt ich habe richtig verstanden was du willst). Du hast im Match nachher lediglich genau soviel Gruppen wie du Klammern (Gruppierungen) angegeben hast (plus die alles umfassende Gruppe).
Du könntest höchstens eine große Anzahl an Gruppierungen angeben:
... und dann schauen wieviel Gruppen gefüllt sind.Code :1
([^:]+)?(?::([^:]+))?(?::([^:]+))?(?::([^:]+))?(?::([^:]+))?(?::([^:]+))?(?::([^:]+))?(?::([^:]+))?(?::([^:]+))?(?::([^:]+))?(?::([^:]+))?(?::([^:]+))?(?::([^:]+))?
Allerdings würde ich dir empfehlen einfach das innere der Klammern zu extrahieren und dann am Doppelpunkt zu splitten.
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
23.06.10 14:25 #10
Ich bin mit dem Kopf leider schon wieder woanders. Folgend:
Welches man durch das obige regex schleifen könnte. Es wird doch mit Sicherheit eine Möglichkeit geben, dies in einem Regex zu realisieren. Aber das bleibt Deine AufgabeCode :1 2 3 4 5
formel(test1:test2:test3) '/(formel\()+ (([^:].*):?)+ \)/Sx' -> array[2][0] = test1:test2:test3

mfg chmeeMein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
Benutzt den DANKE-Knopf oder bewertet den Beitrag
"GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
-> Regexp <- -> php <- -> Javascript <-
-
23.06.10 15:42 #11
Also, ich glaub ja auch, dass das Abbilden auf einen einzigen Regex hier nicht klug wäre. Wenn ich dich recht verstanden habe, dann willst du ja beliebig viele durch Doppelpunkt voneinander getrennte Parameter eines Methodenaufrufs extrahieren.
Erster Lösungsansatz:
Code java:
Zweiter Ansatz:
Code java:
Gruß
MatthiasGeändert von snoopysalive (23.06.10 um 15:46 Uhr)
-
Ich rate mal drauf los, dass diese Lösung immer nicht genommen wird, da der Threadersteller lieber Regex verwenden möchte
Bei Problemen mit Codes, postet bitte den entsprechenden Codeausschnitt und setzt den in entsprechende Tags.
( [cpp] [/cpp] [css] [/css] [html] [/html] [java] [/java] [javascript] [/javascript] [php] [/php] [sql] [/sql] )
"Funktioniert nicht" ist keine Fehlermeldung. Bitte eine genaue Fehlerbeschreibung und, wenn vorhanden, Fehlermeldungen posten.
RegEx Tutorial
PHP Funktionsreferenz
-
23.06.10 15:57 #13
Nach ner Spazierfahrt auf m Rad muss ich deepthroats Aussage unterstreichen. Mit einer Regex wirds nicht gehen. Man kann in einer Regex nunmal nicht eine unbekannte Anzahl Wiederholungen einer Gruppierung durchführen. Deepthroats Versuch ist die einzig funktionierende, indem man die Maximalanzahl begrenzt. Das wiederum beschränkt die Funktionsausgabe, also am Ende doch 2x Regex oder die Variante mit Explode/Split und Doppelpunkt.
mfg chmeeGeändert von chmee (23.06.10 um 16:18 Uhr) Grund: man mit einem n
Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
Benutzt den DANKE-Knopf oder bewertet den Beitrag
"GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
-> Regexp <- -> php <- -> Javascript <-
-
23.06.10 16:00 #14
Dann kann ich nur sagen, dass es nicht möglich ist, dieses Problem mit Hilfe eines einzigen regulären Ausdrucks und nur unter Verwendung von Match-Gruppen zu lösen, solange der Anspruch besteht, dass die Parameterliste beliebig lang sein darf.
-
23.06.10 16:18 #15
zitiert: Man kann in einer Regex nunmal nicht eine unbekannte Anzahl Wiederholungen einer Gruppierung durchführen.
Sollte wohl genau das heissen..
mfg chmeeMein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
Benutzt den DANKE-Knopf oder bewertet den Beitrag
"GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
-> Regexp <- -> php <- -> Javascript <-
Ähnliche Themen
-
Mittels Regex Gültigkeit einer anderen Regex prüfen
Von blade runner im Forum PHPAntworten: 8Letzter Beitrag: 25.06.10, 12:07 -
REGEX Problem - Regex auf den gesamten String anwenden?
Von angelikamorgan im Forum JavaAntworten: 1Letzter Beitrag: 21.01.08, 16:58 -
Regex-Hilfe für Anfänger und Profis
Von Neurodeamon im Forum Coders TalkAntworten: 10Letzter Beitrag: 29.08.06, 09:35 -
[RegEx] Hilferuf eines RegEx-Desperados
Von ManicMarble im Forum Coders TalkAntworten: 15Letzter Beitrag: 16.06.05, 08:49 -
Parsing: RegEx mit '&', RegEx-Kenner gefragt
Von Kachelator im Forum PHPAntworten: 8Letzter Beitrag: 21.04.04, 09:16





Zitieren


Login





