WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 21.07.2002, 15:30   #1
it00x30
Veteran
 
Registriert seit: 21.07.2001
Alter: 45
Beiträge: 404


Standard 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)
it00x30 ist offline   Mit Zitat antworten
Alt 21.07.2002, 16:43   #2
käptn
Inventar
 
Registriert seit: 04.11.2001
Alter: 45
Beiträge: 2.150


Standard

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...
käptn ist offline   Mit Zitat antworten
Alt 27.07.2002, 13:04   #3
it00x30
Veteran
 
Registriert seit: 21.07.2001
Alter: 45
Beiträge: 404


Standard

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
it00x30 ist offline   Mit Zitat antworten
Alt 27.07.2002, 13:57   #4
käptn
Inventar
 
Registriert seit: 04.11.2001
Alter: 45
Beiträge: 2.150


Standard

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 ist offline   Mit Zitat antworten
Alt 27.07.2002, 14:46   #5
käptn
Inventar
 
Registriert seit: 04.11.2001
Alter: 45
Beiträge: 2.150


Standard

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 ist offline   Mit Zitat antworten
Alt 27.07.2002, 15:13   #6
käptn
Inventar
 
Registriert seit: 04.11.2001
Alter: 45
Beiträge: 2.150


Standard

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
käptn ist offline   Mit Zitat antworten
Alt 28.07.2002, 11:46   #7
_m3
Inventar
 
Registriert seit: 24.09.2001
Beiträge: 7.335


Standard

Code:
use strict;
my $text = 'blablabla = "blablalbalba",';
$text =~ s/"(.*?)"/{$1}\n\n/gi;
print "$text\n";
OUTPUT:
============================
E:\TEMP>perl x.pl
blablabla = {blablalbalba}

,
============================
____________________________________
Weiterhin zu finden auf http://martin.leyrer.priv.at , http://twitter.com/leyrer , http://www.debattierclub.net/ , http://www.tratschen.at/ und via Instant Messaging auf Jabber: m3 <ät> cargal.org .
_m3 ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:37 Uhr.


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