Thread Datei nach Zeichen durchsuchen
(15 answers)
Opened by Emeto at 2011-07-01 18:09 Guest Emeto Du musst in der zweiten RegEx zumindest die öffnende eckige Klammer oder einfach beide escapen: Code (perl): (dl
)
if(/.*\[$key\]/){ ... } In der ersten RegEx machst Du das, aber unnötig unübersichtlich mit Zeichenklassen, einfacher wäre: Code (perl): (dl
)
if(/(\[\d+\])/){ ... } Die erste Schleife würde ich so schreiben: Code (perl): (dl
)
1 2 3 4 5 while (my $line = <IN>){ if ($line =~ m|(\[\d+\])|){ $error{$1} += 1; } } Du hast in Deiner ersten RegEx übrigens die eckigen Klammern mit im Ergebnis ($1). Wenn Du nur die Zahl brauchst, musst Du $line =~ m|\[(\d+)\]| schreiben. edit: Wenn die Klammern absichtlich dabei sind, musst Du sie in der 2. RegEx dann weglassen. Die implizite Verwendung von $_ ist zwar auf den ersten Blick lässig, hat aber ihre Tücken. Für das Patternmatching muss man nicht immer '/' als Begrenzung nehmen. Hier macht das '|' z.B. die Grenzen der RegEx deutlicher, und Du kommst mit der '/\'-Mixtur nicht so schnell durcheinander (Mikado-Pattern). Gruß FIFO EDIT: Du verwendest printf statt print, das funktioniert so nicht. Last edited: 2011-07-01 20:28:37 +0200 (CEST) Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it? -- Brian Kernighan: "The Elements of Programming Style"
|