Marcus: Regulärer Ausdruck (Leerzeichen)

Hallo,

gestern wurde mir schon mal fix geholfen und heute habe ich nochmal ein Frage:

Ich möchte aus einem String alle Leerstellen rausfiltern die grösser als 1 Leerzeichen-Abstand sind, also die normalen Abstände zwischen zwei Wörtern können drinnen bleiben (Beispiel_: "Dieser Abstand" --->wäre OK) alles was vom Abstand her grösser ist (Beispiel_: "Dieser         Abstand" --->soll raus), soll rausgefiltert werden. Wie funzt das am besten? Danke schon mal im voraus!

Marcus

  1. Hallo,

    gestern wurde mir schon mal fix geholfen und heute habe ich nochmal ein Frage:

    Ich möchte aus einem String alle Leerstellen rausfiltern die grösser als 1 Leerzeichen-Abstand sind, also die normalen Abstände zwischen zwei Wörtern können drinnen bleiben (Beispiel_: "Dieser Abstand" --->wäre OK) alles was vom Abstand her grösser ist (Beispiel_: "Dieser         Abstand" --->soll raus), soll rausgefiltert werden. Wie funzt das am besten? Danke schon mal im voraus!

    Marcus

    das ist leicht.

    echo eregi_replace("[ ]+"," ","Abstand                       Abstand");

    das sollte eigentlich das Ausgeben

    Abstand Abstand

    mfg
    teal

  2. Hallo Marcus,

    $string = 'Dieser         Abstand';
    $string =~ s/\s+/ /go;

    ergibt 'Dieser Abstand'

    Viele Grüße Günter

  3. hi!

    Ich möchte aus einem String alle Leerstellen rausfiltern die grösser
    als 1 Leerzeichen-Abstand sind, (...)

    Alternative zu den anderen beiden Vorschlägen: ein "look-ahead":

    my $text = "Text  mit vielen   Abständen     an mehreren   Stellen.";
        $text =~ s/\s+(?=\s)//g;

    Dieser reguläre Ausdruck sucht erst eine Folge von Whitespaces (das
    \s+), alles was danach kommt und in (?=pattern) steht, ist eine
    Zusatzbedingung, wird aber nicht mehr dem eigentlichen Pattern
    zugerechnet. Die Zusatzbedingung ist hier, dass auf das gesuchte
    Pattern nochmal ein Whitespace (das zweite \s) folgt. Der reguläre
    Ausdruck ersetzt also nur Whitespaces durch einen leeren String, auf
    die noch ein weiteres Whitespace folgt.

    Möglicherweise ist diese Lösung für dein aktuelles Problem etwas
    umständlich. Aber "look-ahead"- oder "look-behind"-Bedingungen sind
    manchmal eine sehr elegante Möglichkeit zur Formulierung regulärer
    Ausdrücke, die ansonsten nur schwer oder gar nicht möglich wären.

    bye, Frank!