Schrift
[thread]424[/thread]

Regular Expression tunen (Seite 2)

Leser: 1


<< |< 1 2 >| >> 15 Einträge, 2 Seiten
Dubu
 2005-02-08 17:22
#4292 #4292
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Mein erster Tipp: Nimm CPAN:HTML::TreeBuilder dafuer. Das erspart solche Regexes und erlaubt einen wesentlich zivilisierteren Umgang mit HTML.



So, ich gehe davon aus, du hast jetzt in die Manpage von HTML::TreeBuilder geschaut, du verstehst nix und moechtest doch lieber deine Regex weiter benutzen. ;) (Den naechsten Versuch mit HTML::TreeBuilder wirst du machen, wenn sich die zu parsende Webseite syntaktisch etwas aendert und du gezwungen bist, deine ganze Regex neu zu schreiben. Glaub mir, ich spreche aus Erfahrung.)

Dann halt ein paar Tipps zu deiner Regex:

- Warum musst du 38 Subexpressions sammeln, obwohl du nur gerade mal 13 davon separat benutzt und der Rest in Folgen der Art "$10$11$12$13$14$15" wieder auftaucht? Da kannst du doch gleich alles in einer Klammer zusammenfassen. Wenn du keine Zeilenumbrueche einfuegst, sind es sogar nur sieben separate Ausdruecke, die du brauchst (wenn ich richtig gezaehlt habe).

- Sowas: [tt](<\/+[Dd]+>)
ist nicht nur ueberfluessig kompliziert, sondern sogar falshc. Das matcht naemlich nicht nur </td> und </TD>, sondern auch </tttTTTtdDDd>. Wahrscheinlich meinst du das: [tt](<\/[Dd]>)
Und auch das kann man noch einfacher schreiben. Setze hinter die Ersetzung noch ein "i", dann wird Gross-/Kleinschreibung beim Match ignoriert und du kannst es einfach so schreiben: (<\/td>).
Andererseits: Warum muss das ueberhaupt in einer Variable gespeichert werden, wenn's doch nur ein </td> sein kann?

- Das hier ist auch viel zu kompliziert: (<[Ii]+[Mm]+[Gg]+ [Ss]+[Rr]+[Cc]+[a-zA-Z0-9:;&§,-_#% \?\.\"\'\=\_]*">)
Daraus wuerde ich Folgendes machen: <img src="(.*?)">
Das mit dem Modifier "i" gilt wie oben. Und eingefangen wird hier nur die URL des Bildes (sofern keine anderen Parameter vorkommen), die du dann bequem weiter verwenden kannst. Evtl. wuerde ich im Muster statt des Leerzeichens ein "\s+" einsetzen, das passt dann auch auf mehr als ein Leerzeichen, Tabs und Zeilenumbrueche.



Ach ja, hatte ich schon darauf hingewiesen, dass man sowas besser mit CPAN:HTML::TreeBuilder macht? ;)
renee
 2005-02-09 12:23
#4293 #4293
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
CPAN:HTML::Parser eignet sich hervorragend für das Parsen von HTML-Seiten. Da kannst Du ja auf eine bestimmte Art von Tags reagieren...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Dubu
 2005-02-10 23:50
#4294 #4294
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Vielleicht sollte ich ja noch etwas ergaenzen: CPAN:HTML::TreeBuilder baut auf CPAN:HTML::Parser auf. Bei diesem Problem ist IMHO der TreeBuilder besser geeignet, weil man erstmal durch Parsen einen Baum erzeugt, dann Elemente darin umsortieren, einzelne Attribute und Werte aendern und das Ergebnis wieder ausgeben kann. Der Umgang mit dem TreeBuilder ist aber wirklich nicht trivial, vor allem weil man sich die benoetigten Teile aus mehreren Manpages zusammenkratzen muss (HTML::Parser, HTML::TreeBuilder, HTML::Element, ...)
ramseier
 2005-02-16 16:31
#4295 #4295
User since
2005-02-08
6 Artikel
BenutzerIn
[default_avatar]
Grundsätzlich ist das mit dem HTML::TreeBuilder wohl schon möglich, was aber wenn diese Module auf dem Server nicht installiert sind?
coax
 2005-02-16 16:47
#4296 #4296
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Dann kann die Installation mal mit den Tool von pq probiert werden Module ohne Root-Rechte installieren, mittels CGI-Skript. ;)
,,Das perlt aber heute wieder...'' -- Dittsche
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2005-02-08 10:59.