• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> 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