|  |  | |
|  |  | 
| 
 | |||||||
| Programmierung Rat & Tat für Programmierer | 
|  | 
|  | Themen-Optionen | Ansicht | 
|  21.07.2002, 16:30 | #1 | 
| Veteran  Registriert seit: 21.07.2001 Alter: 45 
					Beiträge: 404
				 |  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) | 
|   |   | 
|  21.07.2002, 17:43 | #2 | 
| Inventar  Registriert seit: 04.11.2001 Alter: 45 
					Beiträge: 2.150
				 |   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... | 
|   |   | 
|  27.07.2002, 14:04 | #3 | 
| Veteran  Registriert seit: 21.07.2001 Alter: 45 
					Beiträge: 404
				 |   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 | 
|   |   | 
|  27.07.2002, 14:57 | #4 | 
| Inventar  Registriert seit: 04.11.2001 Alter: 45 
					Beiträge: 2.150
				 |   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 | 
|   |   | 
|  27.07.2002, 16:13 | #6 | |
| Inventar  Registriert seit: 04.11.2001 Alter: 45 
					Beiträge: 2.150
				 |   Zitat: 
 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 | |
|   |   | 
|  28.07.2002, 12:46 | #7 | 
| Inventar  Registriert seit: 24.09.2001 
					Beiträge: 7.335
				 |   Code: use strict;
my $text = 'blablabla = "blablalbalba",';
$text =~ s/"(.*?)"/{$1}\n\n/gi;
print "$text\n";============================ 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 . | 
|   |   | 
|  | 
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| 
 | 
 |