phpbar.de logo

Mailinglisten-Archive

[php] =?ISO-8859-1?B?UmU6IFtwaHBdIDEvMiBPVDogUmVndWzkcmUgQXVzZHL8Y2tl ?=

[php] Re: [php] 1/2 OT: Reguläre Ausdrücke

Daniel Lorch php_(at)_phpcenter.de
Sat, 1 Jun 2002 11:35:11 +0200


Hi,

> So SOLLTE es sein:
> $preg_url = array('~href=([\"\'])([^\\1]+)\\1~ui', // Ankers, Links
>                   '~action=([\"\'])([^\\1]+)\\1~i', // Actions (Forms)
>                   '~src=([\"\'])([^\\1]+)\\1~ui'); // Images

Mit dem Pattern-Modifier 'u' hatte ich auch schon meine Probleme.
Folgende Tipps:
- Setze nur den Quantifizierer auf ungreedy, der auch ungreedy sein
  sollte (mit "?")
- Prüfe, ob sich die href/action/src innerhalb eines Tags befinden.
  Auch wenn es etwas mehraufwand bedeutet, würde ich sogar spezifisch
  sämtliche Tags (<a, <form, ..) erwähnen, damit Du wirklich nur die
  gewünschten Tags matchst.

Das hier funktioniert bei mir wunderbar:

<?php

  header("Content-type: text/plain\n\n");

  preg_match("/<.*?href=([\"\'])([^\\1]*?)(\\1).*?>/i",
             "<a href=\"foo.html\" target=\"_blank\">",
             $matches);

  var_dump($matches);

?>

Wobei man natürlich /is und preg_match_all für mehrere Matches
benötigen würde :)

-daniel


php::bar PHP Wiki   -   Listenarchive