正则表达式为http-equiv ="刷新"元标记

1 php regex meta-tags

我需要PHP中的regexp才能在URL中找到http-equiv ="refresh"元标记.我需要的是要遵循的实际URL.现在,据我所知,有两种有效的方法可以使用这个元标记:

content="0; url=urlhere" http-equiv="refresh" />
Run Code Online (Sandbox Code Playgroud)

http-equiv="refresh" content="0; url=urlhere"/>
Run Code Online (Sandbox Code Playgroud)

谢谢!

nic*_*083 6

迪马,

试试这个:

<?
  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>";
?>
Run Code Online (Sandbox Code Playgroud)

输出:

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"
}
Run Code Online (Sandbox Code Playgroud)

请记住,您必须处理空格(内部内容属性,标记之间,http-equiv属性内部等),例如:

<META HTTP-EQUIV="Refresh" CONTENT=" 5 ; URL=http://www.stackoverflow.com ">
Run Code Online (Sandbox Code Playgroud)

以下代码段处理该情况:

<?
  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>";
?>
Run Code Online (Sandbox Code Playgroud)

输出:

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

最后,如果这还不够,你可以在内容属性的每一侧检查http-equiv ="refresh"(总是考虑到白色空格),如下所示:

<?
  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>";
?>
Run Code Online (Sandbox Code Playgroud)

输出:

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"
}
Run Code Online (Sandbox Code Playgroud)

你可以使用相同的方法.添加支持考虑部件.
另外,请记住始终使用i选项运行正则表达式,以启用不区分大小写的匹配.