/ / Regex für http-equiv = Meta-Tag "aktualisieren" - PHP, Regex, Meta-Tags

Regex für http-equiv = "Aktualisieren" -Meta-Tag - PHP, Regex, Meta-Tags

Ich benötige einen regulären Ausdruck in PHP, um das Meta-Tag http-equiv = "refresh" in einer URL zu finden. Was ich brauche, ist die tatsächliche URL zu folgen. Soweit ich weiß, gibt es zwei gültige Möglichkeiten, dieses Meta-Tag zu verwenden:

content="0; url=urlhere" http-equiv="refresh" />

und

http-equiv="refresh" content="0; url=urlhere"/>

Vielen Dank!

Antworten:

4 für die Antwort № 1
http-equivW*refresh.+?urlW+?[""](.+?)[""]

Versuchen:

if (preg_match("/meta.+?http-equivW+?refresh/i", $x)) {
preg_match("/content.+?urlW+?[""](.+?)[""]/i", $x, $matches);
print_r($matches);
}

3 für die Antwort № 2

Dima,

Versuche dies:

<?
preg_match("|content="d+;url=(.*?)"|i", "<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://www.stackoverflow.com">", $res1);
preg_match("|content="d+;url=(.*?)"|i", "<META CONTENT="5;URL=http://www.stackoverflow.com" HTTP-EQUIV="Refresh">", $res2);

echo "<pre>";
var_dump($res1);
var_dump($res2);
echo "</pre>";
?>

Ausgabe:

array(2) {
[0]=>
string(44) "CONTENT="5;URL=http://www.stackoverflow.com""
[1]=>
string(28) "http://www.stackoverflow.com"
}
array(2) {
[0]=>
string(44) "CONTENT="5;URL=http://www.stackoverflow.com""
[1]=>
string(28) "http://www.stackoverflow.com"
}

Denken Sie daran, dass Sie mit Leerzeichen umgehen müssen (innerhalb des Inhaltsattributs, zwischen Tags, innerhalb des http-Äquiv-Attributs usw.), wie zum Beispiel:

<META HTTP-EQUIV="Refresh" CONTENT=" 5 ; URL=http://www.stackoverflow.com ">

Das folgende Code-Snippet behandelt diesen Fall:

<?
preg_match("|content="s*d+s*;s*url=(.*?)s*"|i", "<META HTTP-EQUIV="Refresh" CONTENT=" 5 ; URL=http://www.stackoverflow.com ">", $res3);

echo "<pre>";
var_dump($res3);
echo "</pre>";
?>

Ausgabe:

array(2) {
[0]=>
string(48) "CONTENT=" 5 ; URL=http://www.stackoverflow.com ""
[1]=>
string(28) "http://www.stackoverflow.com"
}

Wenn dies nicht ausreicht, können Sie auf jeder Seite des Inhaltsattributs auf http-equiv = "refresh" prüfen (berücksichtigen Sie dabei immer die Leerzeichen):

<?
preg_match("|(?:http-equiv="refresh".*?)?content="d+;url=(.*?)"(?:.*?http-equiv="refresh")?|i", "<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://www.stackoverflow.com">", $res4);
preg_match("|(?:http-equiv="refresh".*?)?content="d+;url=(.*?)"(?:.*?http-equiv="refresh")?|i", "<META CONTENT="5;URL=http://www.stackoverflow.com" HTTP-EQUIV="Refresh">", $res5);


echo "<pre>";
var_dump($res4);
var_dump($res5);
echo "</pre>";
?>

Ausgabe:

array(2) {
[0]=>
string(44) "CONTENT="5;URL=http://www.stackoverflow.com""
[1]=>
string(32) "http://www.stackoverflow.com"
}
array(2) {
[0]=>
string(65) "CONTENT="5;URL=http://www.stackoverflow.com" HTTP-EQUIV="Refresh""
[1]=>
string(32) "http://www.stackoverflow.com"
}

Sie könnten den gleichen Ansatz verwenden. Unterstützung für die Berücksichtigung der Teile hinzufügen.
Denken Sie auch daran, immer reguläre Ausdrücke mit der Option i auszuführen, um die Übereinstimmung ohne Berücksichtigung der Groß- und Kleinschreibung zu aktivieren.