Schrift
[thread]12385[/thread]

schonwieder regex 2te bis Nte Komma ersetzen

Tags: Ähnliche Threads

Leser: 1


<< >> 5 Einträge, 1 Seite
Froschpopo
 2008-08-21 05:25
#113789 #113789
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Also dieses regexe bringen mich noch mal in die Klappse!!

Diesmal verstehe ich folgendes nicht:
Code (perl): (dl )
perl -e '$str = "Wort, Satz mit,- ohne Kommas"; @array = $str=~ /^(.+),\s*(.+)/; print $_,"\n" for @array';


bringt mir folgendes Ergebnis:
Code: (dl )
1
2
Wort, Satz mit
- ohne Kommas


Ich möchte aber, dass er NUR das erste Komma trifft !
Ich dachte, wenn ich den m-Modifier (?) weglasse, dann würde er nach dem ersten Treffer aufhören. Tut er ja in gewisser weise auch, aber stattdessen speichert er immer den letzten Treffer!
Kann man irgendwie festlegen, dass nur das erste Ergebnis festgehalten wird?
Was ich also brauche wäre das hier:
Code (perl): (dl )
@array = ('Wort', 'Satz mit,- ohne Kommas');


Ich habe zwar mittlerweile auch noch eine Lösung mit split() gefunden, aber das hier juckt mich trotzdem in den Fingern!
LanX-
 2008-08-21 05:29
#113790 #113790
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
versuchs mal nongreedy /^(.+?), ...

Froschpopo+2008-08-21 03:25:05--
Also dieses regexe bringen mich noch mal in die Klappse!!


warum benutzt du sie dann?
Gast Gast
 2008-08-21 05:51
#113791 #113791
Froschpopo+2008-08-21 03:25:05--
Also dieses regexe bringen mich noch mal in die Klappse!!

Man muß sich immer ganz genau daran halten was die einzelnen Zeichen nun bewirken. Ansonsten kann es einen wirklich in den Wahnsinn treiben. :-)

Froschpopo+2008-08-21 03:25:05--
Ich möchte aber, dass er NUR das erste Komma trifft !

Das Problem ist das ".+", das ja besagt finde irgendwas und so viel wie möglich davon.
Hättest du gesagt ".+?", würde die Regexp versuchen irgendwas zu finden und so wenig wie möglich davon.

Froschpopo+2008-08-21 03:25:05--
Ich dachte, wenn ich den m-Modifier (?) weglasse, dann würde er nach dem ersten Treffer aufhören. Tut er ja in gewisser weise auch, aber stattdessen speichert er immer den letzten Treffer!

Der Modifier "m" sagt doch nur, dass er alles als Multiline erkennen soll, also Zeilenumbrüche sollen als Ende des Strings erkannt werden. (was übrigens die Voreinstellung ist)
Oder meinst du "~m//" gegenüber "~//"? Das ist nur eine Kenntlichmachung für perl wenn du andere Trenner als "/" nutzen willst.
Froschpopo
 2008-08-21 05:56
#113792 #113792
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Weil ich anders nicht weiterkomme. Normalerweise klappt's, aber manchmal bringen sie mich auch zu verzweiflung.
Danke übrigens für den Tipp, klappt super!
moritz
 2008-08-21 10:50
#113794 #113794
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Ich verwende bei sowas immer
Code: (dl )
m/^([^,]+),\s*(.+)/


Damit schreibt man genau, was man will - der erste Block soll ja kein Komma enthalten.
<< >> 5 Einträge, 1 Seite



View all threads created 2008-08-21 05:25.