PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : HTML Tags finden


bpaulsen
07.02.2008, 10:41
Hallo Zusammen,

ich versuche einen Regulären Ausdruck zu schreiben, der mir eine URL findet, aber nur dann, wenn sie nicht in speziellen HTML Tags steht.
Ein beispiel wäre:

<style type="text/css"> <!-- .link{ BACKGROUND: #333; } /* <a href="http://www.test.de" style="color:#C0C0C0" target="_blank">Ungültiger Link</a> */ --> </style> </head> <body text="#000000" bgcolor="#FFFFFF" link="#000000" alink="#000000" vlink="#000000"> <a href="http://www.test.de">Test Link der erfasst werden soll</a> <style> <a href="http://www.test.de">Ungültiger Link</a> </style>


hier sind drei Links zu der URL http://www.test.de aber nur der mittlere ist eigentlich der Richtige. Denn dieser ist nicht in einem <Style>-Tag, zusätzlich ist der erste Link auch noch als Kommentar drin, aber das filtere ich später raus. Nun habe ich folgenden Regulären Ausdruck geschrieben, leider funktioniert er nicht:

preg_match_all("@<\s*(style|script).*?>.*?(http://www.test.de){1}.*?<\s*/\s*\\1\s*>@mi",$content,$match)

danach befinden sich alle drei Links im Array $match, was noch viel interessanter ist, das er bei dem ersten es richtig macht und bei den zwei anderen den gesamten Code von oben ausgibt:

array(1) {
[0]=>
string() "<style type="text/css"> <!-- .link{ BACKGROUND: #333; } /* <a href="http://www.test.de" style="color:#C0C0C0" target="_blank">Ungültiger Link</a> */ --> </style>"
}
[1]=>
array(1) {
[0]=>
string() "<style type="text/css"> <!-- .link{ BACKGROUND: #333; } /* <a href="http://www.test.de" style="color:#C0C0C0" target="_blank">Ungültiger Link</a> */ --> </style> </head> <body text="#000000" bgcolor="#FFFFFF" link="#000000" alink="#000000" vlink="#000000"> <a href="http://www.test.de">Test Link der erfasst werden soll</a> <style> <a href="http://www.test.de">Ungültiger Link</a> </style>"
}
[2]=>
array(1) {
[0]=>
string() "<style type="text/css"> <!-- .link{ BACKGROUND: #333; } /* <a href="http://www.test.de" style="color:#C0C0C0" target="_blank">Ungültiger Link</a> */ --> </style> </head> <body text="#000000" bgcolor="#FFFFFF" link="#000000" alink="#000000" vlink="#000000"> <a href="http://www.test.de">Test Link der erfasst werden soll</a> <style> <a href="http://www.test.de">Ungültiger Link</a> </style>"
}

könnt ihr mir helfen den richtigen Regulären Ausdruck zu finden?

Vielen Dank

Gruß

Björn


Crusade
10.07.2008, 22:12
Würde ich hiermit lösen,

<?php
$subject = ' <style type=\"text/css\"> <!-- .link{ BACKGROUND: #333; } /* <a href=\"http://www.test.de\" style=\"color:#C0C0C0\" target=\"_blank\">Ungültiger Link</a> */ --> </style> </head> <body text=\"#000000\" bgcolor=\"#FFFFFF\" link=\"#000000\" alink=\"#000000\" vlink=\"#000000\"> <a href=\"http://www.test.de\">Test Link der erfasst werden soll</a> <style> <a href=\"http://www.test.de\">Ungültiger Link</a> </style>';
$pattern = '#<a[^<>]*?>#is';
$result = preg_match_all($pattern, $subject, $subpattern);
?>

Array (
[0] => <a href="http://www.test.de" style="color:#C0C0C0" target="_blank">
[1] => <a href="http://www.test.de">
[2] => <a href="http://www.test.de">
)