WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   PERL - problem mit regular expression (http://www.wcm.at/forum/showthread.php?t=63693)

it00x30 21.07.2002 15:30

PERL - problem mit regular expression
 
hi,

versuche gerade meine ersten schritte in perl und bin auf ein problem gestossen:

ich will eine zeile die so ausschaut
blablabla = "blablalbalba",

in eine zeile umwandeln die so auschschaut
blablabla = {blablabla},

hab dazu versucht mit
s/.*=.*".*",/.*=.*{.*},/
zu ersetzen.

er erkennt zwar die richtigen zeilen im file (also funktionert der erste teil - allerdings anstatt nur die anführungszeichen zu ersetzten schreibt er mir meine ersetzungsanweisung ins file, also .*= ...

wo liegt hier mein denkfehler? ich hab nämlich gedacht, dass er .* einfach mit dem string ersetzt, den er vorfindet (also das blablabla)

käptn 21.07.2002 16:43

du musst referenzen mit runden klammern bilden

pattern = /\b(.*\=.*)\"(.*)\"\b/
replace = /\b\\1\{\\2\}\b/

HTH

[e]
...aber ich habs net ausprobiert, also besserts mich bitte aus wenn was net stimmt, ausserdem arbeite ich ja nicht direkt mit perl sondern mit der pcre von php...

it00x30 27.07.2002 13:04

hat wunderbar funktioniert - ich weiss nur nicht wozu du die ganzen backslasches drin hast ... -> egal


ich hab noch eine frage, kann ich im replacestring eigentlich so was schreiben:

s/blablalba/$1\n\n/

ich meine jetzt die zeilenvorschübe, oder muss ich die irgendwie anders einbauen - ich bekommen nämlich so einen komischen compilerfehler wenn ich das mache

käptn 27.07.2002 13:57

du musst die newlines auch mit backslashes maskieren!

jetzt weisst du auch wieso ich soviele backslashes drin habe, ich maskier schon aus vorsich alles was nich in \d und \w drinnen ist (desimalzahlen und wort zeichen == [0-9a-zA-Z_])


s/blablalba/$1\n\n/

der darf nicht sein wenn du "/" als regexp-begrenzer hast,also maskieren, und \n auch maskieren: \\n

was ist das "s" am anfang?

HTH

käptn 27.07.2002 14:46

eigentlich sind die vielen backslashes ja gar nicht notwendig....vor allem in zeichenklassen [...]

zum testen von regexp empfiehlt sich vor allem diese seite...


HTH

käptn 27.07.2002 15:13

Zitat:

Original geschrieben von it00x30
hat wunderbar funktioniert - ich weiss nur nicht wozu du die ganzen backslasches drin hast ... -> egal


ich hab noch eine frage, kann ich im replacestring eigentlich so was schreiben:

s/blablalba/$1\n\n/

ich meine jetzt die zeilenvorschübe, oder muss ich die irgendwie anders einbauen - ich bekommen nämlich so einen komischen compilerfehler wenn ich das mache

sorry meine erste antwort auf diese posting war nicht ganz richtig, ich dachte das ist der searchstring...

was funkt denn an diesem replacement nicht?

in php mit PCRE ist der replace-string wie ein normaler string nur halt mit referenzen...

z.B.: "hallo $1 \n\n";

HTH

_m3 28.07.2002 11:46

Code:

use strict;
my $text = 'blablabla = "blablalbalba",';
$text =~ s/"(.*?)"/{$1}\n\n/gi;
print "$text\n";

OUTPUT:
============================
E:\TEMP>perl x.pl
blablabla = {blablalbalba}

,
============================


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag