phpbar.de logo

Mailinglisten-Archive

[php] regex fuer <a href>-Tag

[php] regex fuer <a href>-Tag

Kristian =?iso-8859-1?Q?K=F6hntopp?= kk_(at)_netuse.de
Tue, 31 Aug 1999 16:34:22 +0200


Björn Schotte wrote:
> ... der aber auch nicht so mag, wie ich es
> gerne haette:

Die Expression

=<a href="(.*)">(.*)</a>=

matched alle URLs, die in Anführungszeichen stehen und den Text im URL-Container.

Die Expression

=<a href=(\S+)\s>(.*)</a>=

matched alle URLs, die nicht in Anführungszeichen stehen und den Text im URL-Container.

In beiden Fällen können natürlich noch weitere Sachen Bestandteil des Tags sein, sodaß man diese ggf. bewahren muß. Es muß also

=<(a.*)href="(.*)"(.*)>(.*)</a>=
=<(a.*)href=(\S+)\s(.*)>(.*)</a>=

heißen. Man kann die beiden Ausdrücke wegen der Bildungsregeln für
URLs unifizieren, und bekommt

=<(a.*)href="?(\S+)"?\s(.*)>(.*)</a>=i

Anker 1 ist ist dann der Tag plus führende Attribute, 
Anker 2 die URL, 
Anker 3 die folgenden Attribute und
Anker 4 ist der Inhalt des Containers. 

Die i-Option macht preg_match() case insensitive.

Den Inhalt von Anker 2 kann man dann parse_url() zum Fraße vorwerfen.


Also

while(!feof($fp)) {
  $zeile = fgets($fp, 1024);
  $i=1;

  while(preg_match('=(.*)<(a.*)href="?(\S+)"?\s(.*)>(.*)</a>(.*)=i', $zeile, $txt)) {
    $url = parse_url($txt[2];
    
    $zeile = sprintf("...", ...); // abrakadabra.
    $i++;
  }
  fputs($fp1, $zeile);
}

Kris "http://www.koehntopp.de/kris/images/id_kk.jpg" tian

-- 
Kristian Köhntopp, NetUSE Kommunikationstechnologie GmbH
Siemenswall, D-24107 Kiel, Germany, +49 431 386 436 00
Using PHP3? See our web development library at
http://phplib.shonline.de/ (GPL)


php::bar PHP Wiki   -   Listenarchive