• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

[RegEx] match ; aber nicht ü

svn

Prinzenapfel
Registriert
20.01.06
Beiträge
553
Hallo,
ich sitze seit Stunden an einem Problem.

Ich habe folgenden String:

rot;gelb;grün;blau

Wie teile ich den String mittels RegEx damit ich

rot
gelb
grün
blau

erhalte?
 

kauan

Stina Lohmann
Registriert
31.12.05
Beiträge
1.043
Mir kommt spontan folgendes in den Sinn:
erst ü in ü ersetzen
dann ; in \n ersetzen
dann wieder ü zurück in ü

gruss
Jonathan
 

svn

Prinzenapfel
Registriert
20.01.06
Beiträge
553
Leider hab ich das voll $xxx; Programm an Html-Codes. :/
 

Maluku

Finkenwerder Herbstprinz
Registriert
10.05.08
Beiträge
464
Es ist so nicht möglich wie du das willst, dafür bräuchtest du eine look behind assertion mit variabler lenge:
/(?<!&\w+);/ (An semicolon teilen, es sei denn, es ist ein & und eine variable menge buchstaben davor...

Aber mit einer match-Regex kann man alle (auch die mit mehreren &umlauten; ) finden:

Code:
/((?:\w*&\w+;\w*)*|\w+)(?:;|$)/g

Beispiel (in perl):
Code:
C:\Users\Maluku>perl -e "$a='rot;gelb;gr&uuml;n;blau;gr&uuml;ngr&auml;ulich';print $1,qq(\n) while $a=~/((?:\w*&\w+;\w*)*|\w+)(?:;|$)/g"
rot
gelb
gr&uuml;n
blau
gr&uuml;ngr&auml;ulich
Erklärung: Füllte die erste Match Gruppe ($1 in perl) mit entweder einer beliebigen Menge an \w*&\w+;\w* (d.h.) HTML-Entities mit Buchstaben drumrum oder einem Wort ohne Umlaute: \w+
Die (?: ... )* um die erste Gruppe ist nur zur Gruppierung, damit man den Sachen vermehrfachen kann.
Das ganze bis zu einem ; oder Stringende ($)

Wenn du auch noch Leerzeichen oder andere Sonderzeichen im String hast, dann musst du die Regex so anpassen:
Code:
/((?:[^;]*&\w+;[^;&]*)*|[^;]+)(?:;|$)/g
Beispiel:
Code:
C:\Users\Maluku>perl -e "$a='rot;gelb;gr&uuml;n;blau;gr&uuml;ngr&auml;ulich;g&uuml;n und grell (eher gr&uuml;n als grell)';print $1,qq(\n) while $a=~/((?:[^;]*&\w+;[^;&]*)*|[^;]+)(?:;|$)/g"
rot
gelb
gr&uuml;n
blau
gr&uuml;ngr&auml;ulich
g&uuml;n und grell (eher gr&uuml;n als grell)
 
  • Like
Reaktionen: svn