Mehrzeiliges Muster finden

23/01/2010 - 23:28 von D. Schramm | Report spam
Hallo,

ich möchte in einem String ein mehrzeiliges Muster - also mit Newlines -
finden.
Leider funktionieren meine bisherigen Versuche nicht :-(

Zunàchst habe ich den Inhalt einer HTML-Datei in eine Variable kopiert:

$stringvariable = '';
while(<DATEI>) {
$stringvariable .= $_;
}

Das Muster habe ich ebenfalls in einer Variable abgespeichert:

$muster = '</table>
<td>';

(Ist nur ein Beispiel, einige Muster, nach denen ich suche, gehen auch
über 5 Zeilen.)

Dieses mehrzeilige Muster möchte ich nun in $stringvariable suchen. Dazu
habe ich folgendes ausprobiert:

if($stringvariable =~ /$muster/m) {
print "Gefunden!";
}

Leider funktioniert das nicht. Kann mir jemand helfen?

Danke im voraus und mit freundlichem Gruß,

Dennis Schramm
 

Lesen sie die antworten

#1 Wolf Behrenhoff
24/01/2010 - 00:06 | Warnen spam
D. Schramm schrieb:
Hallo,

ich möchte in einem String ein mehrzeiliges Muster - also mit Newlines -
finden.
Leider funktionieren meine bisherigen Versuche nicht :-(

Zunàchst habe ich den Inhalt einer HTML-Datei in eine Variable kopiert:

$stringvariable = '';
while(<DATEI>) {
$stringvariable .= $_;
}



Das geht einfacher:
my $stringvariable = do { local $/; <DATEI> };


Das Muster habe ich ebenfalls in einer Variable abgespeichert:

$muster = '</table>
<td>';

(Ist nur ein Beispiel, einige Muster, nach denen ich suche, gehen auch
über 5 Zeilen.)

Dieses mehrzeilige Muster möchte ich nun in $stringvariable suchen. Dazu
habe ich folgendes ausprobiert:

if($stringvariable =~ /$muster/m) {
print "Gefunden!";
}

Leider funktioniert das nicht. Kann mir jemand helfen?



Möglichkeiten:
- Du verwendest den falschen Regexp-Modifier. Das m bedeutet
"Multi-Line", d.h. dass ^ und $ auch im mitten im String an Zeilenenden
matchen. Vermutlich willst du das nicht. Ich könnte mir vorstellen, dass
du vielleicht s benutzen möchtest, um mit "." auch Newlines zu matchen.
Vielleicht möchstest du aber auch m und s benutzen?

- Du suchst nicht nach einem Muster, sondern nach einem String. In
diesem Fall m/\Q$muster/ benutzen.

- Oder dein Suchmuster ist falsch bzw. kommt so nicht im String vor
(z.B. anderer Whitespace).

Am besten machst du ein konkretes Beispiel, in dem etwas nicht geht.

- Wolf

Ähnliche fragen