Suchen-Ersetzenin CGI-Script

Suchen-Ersetzenin CGI-Script

am 05.12.2007 15:03:16 von Robert Gladapex

Hallo NG!

Ich habe ein cgi-script, welches aus einem textarea-Feld Text entgegen
nehmen soll und in diesem Zeichen suchen und ersetzen soll:

$texte2 =~ s/\n/\\\\/g;

ersetzt alle Zeilenumbrüche mit 2 Backslashes.

Nun sollen auch noch alle Unterstriche (_) durch Bindestriche(-) ersetzt
werden:

$texte2 =~ s/_/-/g;

Beides klappt wunderbar. Nun habe ich versucht, beide Ersetzungen zu
kombinieren:

$texte2 =~ s/\n/\\\\/g|s/_/\\_/g;

in einem Script auf der Kommandozeile klappt das, im cgi-script wird nur
die erste Ersetzung durchgeführt.
Ich bin ratlos, vielleicht hat jemand einen Tip für mich, wo ich
ansetzen kann?!

Danke und Gruß
Robert
--
* it's more fun to compute...

Re: Suchen-Ersetzenin CGI-Script

am 05.12.2007 15:13:48 von Moritz Lenz

Hallo,

Robert Gladapex wrote:
> Beides klappt wunderbar. Nun habe ich versucht, beide Ersetzungen zu
> kombinieren:
>=20
> $texte2 =3D~ s/\n/\\\\/g|s/_/\\_/g;

Huch, was ist das denn? Binäres "oder" von zwei Ersetzungen?
Führe die Ersetzungen einfach nacheinander aus:
$texte2 =3D~ s/_/\\_/;
$texte2 =3D~ s/\n/\\\\/;

Übrigens sendet dein slrn Umlaute als utf-8, schreibt aber iso-8859-1 i=
n
den Header (oder auf gut Deutsch: "deine Umlaute sind kaputt").

Grüße,
Moritz


--=20
Moritz Lenz
http://perl-6.de/ http://moritz.faui2k3.org/

Re: Suchen-Ersetzenin CGI-Script

am 06.12.2007 12:17:11 von Robert Gladapex

Moritz Lenz schrieb:
>
> Huch, was ist das denn? Binäres "oder" von zwei Ersetzungen?
> Führe die Ersetzungen einfach nacheinander aus:
> $texte2 =~ s/_/\\_/;
> $texte2 =~ s/\n/\\\\/;

Habe ich so gemacht un das klappt gut...
Nur so interessehalber:
Gibt es denn aber keine Möglichkeit, innerhalb einer
Suchen/Ersetzen-Aktion mehrere Such-Ersetzen-Muster aneinander zu
hängen, ähnlich wie in sed mit ; getrennt?
>
> Übrigens sendet dein slrn Umlaute als utf-8, schreibt aber iso-8859-1 in
> den Header (oder auf gut Deutsch: "deine Umlaute sind kaputt").

Jetzt besser? Anscheinend unterstützt slrn noch nicht vollständig
UTF-8...oder ich habe was falsch konfiguriert...

Gruß Robert

--
* it's more fun to compute...

Re: Suchen-Ersetzenin CGI-Script

am 06.12.2007 12:29:43 von Moritz Lenz

Hallo,

Robert Gladapex wrote:
> Moritz Lenz schrieb:
>>
>> Huch, was ist das denn? Binï¿=BDres "oder" von zwei Ersetzungen?
>> Fï¿=BDhre die Ersetzungen einfach nacheinander aus:
>> $texte2 =3D~ s/_/\\_/;
>> $texte2 =3D~ s/\n/\\\\/;
>=20
> Habe ich so gemacht un das klappt gut...
> Nur so interessehalber:
> Gibt es denn aber keine Mï¿=BDglichkeit, innerhalb einer
> Suchen/Ersetzen-Aktion mehrere Such-Ersetzen-Muster aneinander zu
> hï¿=BDngen, ï¿=BDhnlich wie in sed mit ; getrennt?

Man kann sich da was basteln:

my %subst =3D (
"_" =3D> "\\_",
"\n" =3D> "\\\\",
);
my $re =3D join '|', keys %subst;

$string =3D~ s/($re)/$subst{$1}/g



>> ï¿=BDbrigens sendet dein slrn Umlaute als utf-8, schreibt aber iso=
-8859-1 in
>> den Header (oder auf gut Deutsch: "deine Umlaute sind kaputt").
>=20
> Jetzt besser?=20

Nein.

> Anscheinend unterstï¿=BDtzt slrn noch nicht vollstï¿=BDndig
> UTF-8...oder ich habe was falsch konfiguriert...

Ich tippe auf die zweite Möglichkeit ;-)

Grüße,
Moritz

--=20
Moritz Lenz
http://perl-6.de/ http://moritz.faui2k3.org/

Re: Suchen-Ersetzenin CGI-Script

am 06.12.2007 22:49:12 von newsnullsieben

Robert Gladapex wrote:

> Nur so interessehalber:
> Gibt es denn aber keine Möglichkeit, innerhalb einer
> Suchen/Ersetzen-Aktion mehrere Such-Ersetzen-Muster aneinander zu
> hängen, ähnlich wie in sed mit ; getrennt?

Ah, sed(1) ... Dann mach's eben so:

for ($text2) {
s/_/-/g;
s/\n/\\\\/g;
}

Und statt s/_/-/g schlage ich tr/_/-/ vor.
Da kann man auch mehrere (1-zu-1- oder n-zu-1-)Ersetzungen zusammenfassen:
tr/_ /-=/; # Ersetze "_" durch "-" und " " durch "="
tr[_ ?*/][-]; # Ersetze "_", " ", "?", "*" und "/" durch "-"


Ciao,
Harald
--
Harald H.-J. Bongartz
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -=-=-
There's no place like ~

Re: Suchen-Ersetzenin CGI-Script

am 07.12.2007 18:25:36 von w.koenig

On Dec 5, 3:03 pm, Robert Gladapex wrote:
> Hallo NG!
>
> Ich habe ein cgi-script, welches aus einem textarea-Feld Text entgegen
> nehmen soll und in diesem Zeichen suchen und ersetzen soll:
>
> $texte2 =3D~ s/\n/\\\\/g;
>
> ersetzt alle Zeilenumbrüche mit 2 Backslashes.
>
> Nun sollen auch noch alle Unterstriche (_) durch Bindestriche(-) ersetzt
> werden:
>
> $texte2 =3D~ s/_/-/g;
>
> Beides klappt wunderbar. Nun habe ich versucht, beide Ersetzungen zu
> kombinieren:

derartige mehrfachen Ersetzungen lassen sich einfach so durchführen:

%subst =3D ( "\n" =3D> "\\\\", "_" =3D> "-" );
$text2 =3D~ s/([\n_])/ $subst{$1} /eg;

das ist beliebig erweiterbar und effizient.

Winfried König