Regulärer Ausdruck (Leerzeichen)
Marcus
- perl
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
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
Hallo Marcus,
$string = 'Dieser Abstand';
$string =~ s/\s+/ /go;
ergibt 'Dieser Abstand'
Viele Grüße Günter
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!