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
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