Dima,
Essayez ceci:
<?
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>";
?>
Sortie:
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"
}
Gardez à l'esprit que vous aurez à traiter avec des espaces blancs (à l'intérieur attribut contenu, entre les balises, à l'intérieur attribut http-equiv, etc.), tels que:
<META HTTP-EQUIV="Refresh" CONTENT=" 5 ; URL=http://www.stackoverflow.com ">
L'extrait de code suivant gère ce cas:
<?
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>";
?>
sortie:
array(2) {
[0]=>
string(48) "CONTENT=" 5 ; URL=http://www.stackoverflow.com ""
[1]=>
string(28) "http://www.stackoverflow.com"
}
Enfin, si cela ne suffit pas, vous pouvez vérifier http-equiv = « refresh » de chaque côté de l'attribut de contenu (Takin toujours en compte les espaces blancs) comme t son:
<?
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>";
?>
Sortie:
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"
}
Vous pouvez, en utilisant la même approche. ajouter un support pour prendre en compte les pièces.
De plus, souvenez-vous toujours d'exécuter des regex avec l'option i, pour activer la correspondance insensible à la casse.
content =. + Url = ['"] (. +) Capturé dans \ 1 – Cleiton
Comment l'utiliser avec preg_match? Même erreur: Le délimiteur ne doit pas être alphanumérique ou backslash –