Suchen-Ersetzenin CGI-Script

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...
Robert Gladapex [ Mi, 05 Dezember 2007 15:03 ] [ ID #1886674 ]

Re: Suchen-Ersetzenin CGI-Script

Hallo,

Robert Gladapex wrote:
> Beides klappt wunderbar. Nun habe ich versucht, beide Ersetzungen zu
> kombinieren:
>
> $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/\\\\/;

=DCbrigens 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


--
Moritz Lenz
http://perl-6.de/ http://moritz.faui2k3.org/
Moritz Lenz [ Mi, 05 Dezember 2007 15:13 ] [ ID #1886675 ]

Re: Suchen-Ersetzenin CGI-Script

Moritz Lenz <moritz [at] faui2k3.org> 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...
Robert Gladapex [ Do, 06 Dezember 2007 12:17 ] [ ID #1887574 ]

Re: Suchen-Ersetzenin CGI-Script

Hallo,

Robert Gladapex wrote:
> Moritz Lenz <moritz [at] faui2k3.org> schrieb:
>>
>> Huch, was ist das denn? Bin=EF=BF=BDres "oder" von zwei Ersetzungen?
>> F=EF=BF=BDhre die Ersetzungen einfach nacheinander aus:
>> $texte2 =3D~ s/_/\\_/;
>> $texte2 =3D~ s/\n/\\\\/;
>
> Habe ich so gemacht un das klappt gut...
> Nur so interessehalber:
> Gibt es denn aber keine M=EF=BF=BDglichkeit, innerhalb einer
> Suchen/Ersetzen-Aktion mehrere Such-Ersetzen-Muster aneinander zu
> h=EF=BF=BDngen, =EF=BF=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



>> =EF=BF=BDbrigens 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?

Nein.

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

Ich tippe auf die zweite M=C3=B6glichkeit ;-)

Gr=C3=BC=C3=9Fe,
Moritz

--
Moritz Lenz
http://perl-6.de/ http://moritz.faui2k3.org/
Moritz Lenz [ Do, 06 Dezember 2007 12:29 ] [ ID #1887575 ]

Re: Suchen-Ersetzenin CGI-Script

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 <newsnullsieben [at] dustpuppy.de>
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -=-=-
There's no place like ~
newsnullsieben [ Do, 06 Dezember 2007 22:49 ] [ ID #1887576 ]

Re: Suchen-Ersetzenin CGI-Script

On Dec 5, 3:03 pm, Robert Gladapex <glada... [at] gmx.net> 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
w.koenig [ Fr, 07 Dezember 2007 18:25 ] [ ID #1888316 ]
Perl » de.comp.lang.perl.misc » Suchen-Ersetzenin CGI-Script

Vorheriges Thema: Perl/Tk Canvas-Widget
Nächstes Thema: perl2shell