PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RegExpr Problem



brain-death
27-07-2005, 16:59
Hi,

ich habe folgenden String:


<div class="or_row">
<div>Sonntag, 12.
Juni
bis Sonntag, 31. Juli&nbsp;2005</div>

</div>


Jetzt brauche ich die Tage (12. Juni und 31. Juli) und das Jahr (2005)

Nur leider funktioniert das hier nicht:


if($content =~ m/<div>.*, ([0-9]{2})\.\n \t{4}(.*)\n \t{5}bis .*, ([0-9]{2})\. (.*)&nbsp;([0-9]{4})<\/div>/){
print $1."\n";
}


Was mach ich falsch?

bd

michael.sprick
27-07-2005, 17:31
Ersetze in Deinem regex mal die .* gegen .*?

Also statt:



if($content =~ m/<div>.*, ([0-9]{2})\.\n \t{4}(.*)\n \t{5}bis .*, ([0-9]{2})\. (.*)&nbsp;([0-9]{4})<\/div>/)
{
print $1."\n";
}





if($str =~ m/<div>.*?, ([0-9]{2})\.\n \t{4}(.*?)\n \t{5}bis .*?, ([0-9]{2})\. (.*?)&nbsp;([0-9]{4})<\/div>/)
{
print "$1. $2\n";
print "$3. $4\n";
}

brain-death
27-07-2005, 17:47
mmh. geht noch immer nicht?
was soll eigentlich .*? bedeuten??

ich meine "null oder mehrere male" beinhaltet doch "null oder einmal" ??

brain-death
27-07-2005, 18:02
Sorry war mein Fehler.
Es geht jetzt. Besten dank!

Könntest du es trotzdem erklären (s.o.) ??

danke

michael.sprick
27-07-2005, 18:24
Wenn Du .* benutzt, dann passt das auf beliebig viele (0-n) Zeichen bis zum Ende des Strings bzw. bis zum nächsten Newline, wenn Du den Modifier /s nicht benutzt.

Durch das zusätzliche Fragezeichen reduzierst Du die Treffer auf das Minimum - oder anders: Dadurch werden die nachfolgenden Ausdrücke wieder mit einbezogen...

mehr dazu:

perldoc perlre