[Thread Prev][Thread Next]   >Date Index >Thread Index

Re: Regex Frage && non-whitespace character

Jörg Meltzer - Sat Dec 15 01:32:31 2007

Hallo Stefan,

Dir fehlen die Flags 'ms' im Regex.

Nach Damian Conway ist es Best Practice Matches immer als  m//xms oder
m{}xms zu schreiben.

x = Kommentare in Regex möglich, Whitespaces müssen explizit
geschrieben werden.
m = Multiple Zeilen ( match stoppt bei Zeilenumbruch nicht ).
s = '.' matcht auch "\n" Zeichen


Wenn du HTML::Parser etc. nicht verwendest, dann solltest du deinen
Regex auf Lesbarkeit optimieren.

1.) In HTML '/' nicht als Match Separator verwenden

2.) Verwende Minimum-Matching .*?

3.) Klatsch nicht alles in eine Zeile.

Leichter zu lesen ist z.B:

m{
  "pdesc">
  \s+
  <h2>
    (.*?)
  </h2>
  \s+
  <p>
    \s+ (.*?)
  </p>
  }gmsx;


Gruß,
  Jörg



Stefan Bauer schrieb:
> Hallo Liste,
>
> ich versuche gerade aus einer Webseite die folgende Beschreibung zu
> extrahieren:
>
>     <h2>A high-performance mail transport agent</h2>
>     <p>
> Postfix is Wietse Venema's mail transport agent that started life as
> an alternative to the widely-used Sendmail program.  Postfix attempts
> to be fast, easy to administer, and secure, while at the same time
> being sendmail compatible enough to not upset existing users. Thus,
> the outside has a sendmail-ish flavor, but the inside is completely
> different.
>
> Am Ende jeder Zeile befindet sich ein whitespace-Zeichen.
>
> Meine Regex fängt an mit m/"pdesc">\s+<h2>(.*)<\/h2>\s+<p>\s+(.*)/g
>
> Nun tut sich das Problem auf, dass die Erkennung ab dem whitespace
> endet, was ich nicht will.
>
> $1 + $2 lauten bis dato in etwa:
>
> A high-performance mail transport agentPostfix is Wietse Venema's mail
> transport agent that started life as an
>
> Ich starre gerade auf meine Perl-Regex-Tabelle aber werde nicht ganz
> schlau. Was hab ich vergessen?
>
> Gruß
>
> stefan


Next: