User since
2008-06-28
3
Artikel
BenutzerIn
Hallo,
ich habe eine allgemeine Frage zu regulären Ausdrücken.
Ich hab ca. Anfang der Woche angefangen Perl zu lernen und mir ist bis jetzt nicht ganz klar geworden wie genau Perl da vorgeht.
Folgendes Beispiel:
Und zwar möchte ich durch eine Substitution in einer HTML Datei sämtliche Tags durch nichts ersetzen.
Meine erste Idee war als Pattern folgendes zu verwenden: <.+>
Also eine Spitzklammer < gefolgt von mindestens einem bis beliebig viele Zeichen und einer Spitzklammer die das Ende markiert >.
Ist es denn nicht so dass bei der Suche nach dem Pattern zuerst einmal nach < gesucht wird, Danach wird überprüft ob das 2te Zeichen im Pattern passt. Das kann ja jedes beliebige Zeichen (außer \n) sein und trifft so eigentlich immer.
Da dieses beliebige Zeichen beliebig oft auftauchen darf wird dann überhaupt noch ein > gefunden? Dieses fällt ja auch in das Muster .+
Eine Zeile mit z.B.: <b>Test</b>
würde dann ja von <b... bis b> komplett getroffen und ersetzt werden.
Ist das die Vorgehensweise von Perl? Und wenn ja, wie könnte ich dann ein Tag sinnvoll als Pattern darstellen?
//ModEdit GwenDragon: Titel ergänzt
User since
2003-08-04
7321
Artikel
ModeratorIn
<.+?>
daurch wird das .+ nicht so gierig
User since
2008-06-11
11
Artikel
BenutzerIn
<[^>]+>
so vielleicht ? ;-)
(keine ahnung ob das die beste Methode ist ehrlich gesagt, aber damit solltest Du nur ein Tag jeweils treffen.
Aber es kann auch so was geben:
<a href="#" onClick="javascript:alert('Message >> Fehler!')">TEST</a>
was dann? Darum sollte man das Parsen eher den Profis überlassen und Module nutzen. ;-)
Wie oft muss sich das noch sagen?
Regexes sind nicht geeignet zum Parsen von HTML!
Für sowas gibt es HTML-Parser ;)
User since
2005-01-17
14761
Artikel
Admin1
Wenn du ölernen willst, was du mit Regexes alles falsch machen kannst, dafür ist es gut.
Aber um balancierte Tags zu parsen? Nein. jedenfalls nicht mit der normalen Regexengine der derzeitigen Perls. Perl 6 wäre was anderes.
Gast hat Recht. Es steht auch irgendwo in der Perldoku (perlfaq9) drin, dass es keinen Sinn hat, mit einem Regex sowas zu parsen.
Und in
http://board.perl-community.de/thread/11311/startW... haben wir sowas auch mal gehabt.
User since
2008-06-28
3
Artikel
BenutzerIn
Da ich die HTML Seiten um die es geht alle selber geschrieben habe, kann ich sehr sicher sein, dass absolut keine außergewöhnlichen Konstruktionen enthalten sind, sondern nur normales HTML.
Gibt es denn beim arbeiten mit Regulären Ausdrücken in Perl keine Möglichkeit bis zu einem bestimmten Zeichen zu gehen? Wie gesagt habe ich erst anfang der Woche mit Perl angefangen und weiß atm noch nicht sehr viel.
Aus einer anderen Skriptsprache mit großen Möglichkeiten im Umgang mit regulären Ausdrücken (Omnimark) ist mir allerdings eine Möglichkeit bekannt mit der man explizit bis zu einem bestimmten Zeichen oder sogar Pattern suchen kann (Lookahead-Befehl).
User since
2003-08-04
14371
Artikel
ModeratorIn
Das geht auch mit Perl-RegEx...