1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

[RegEx] match ; aber nicht ü

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von svn, 14.11.08.

  1. svn

    svn Prinzenapfel

    Dabei seit:
    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?
     
  2. kauan

    kauan Stina Lohmann

    Dabei seit:
    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
     
  3. svn

    svn Prinzenapfel

    Dabei seit:
    20.01.06
    Beiträge:
    553
    Leider hab ich das voll $xxx; Programm an Html-Codes. :/
     
  4. Maluku

    Maluku Finkenwerder Herbstprinz

    Dabei seit:
    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)
    
     
    svn gefällt das.

Diese Seite empfehlen