Http-equiv = "yenileme" için regex

2 Cevap php

Ben bir URL bir http-equiv = "refresh" meta etiketi bulmak için PHP regexpi gerekir. Neye ihtiyacım takip Gerçek URL. Şimdi, bildiğim kadarıyla bu meta etiketi kullanmak için iki geçerli yolu vardır:

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

ve

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

Teşekkürler!

2 Cevap

http-equiv\W*refresh.+?url\W+?(.+?)\"

Deneyin:

if (preg_match('/meta.+?http-equiv\W+?refresh'/i,$x)) {
   preg_match('/content.+?url\W+?(.+?)\"/i',$x,$matches);
   print_r($matches);
}

Dima

Bu deneyin:

<?
  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>";
?>

Çıktı:

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

: Sen gibi (http-eşdeğer niteliği iç etiketleri arasında içerik niteliği içinde, vb), beyaz boşluk, uğraşmak gerekecek unutmayın

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

Aşağıdaki kod parçası bu durumda işler:

<?
  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>";
?>

Çıktı:

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

Bu yeterli değilse Son olarak, size http-eşitliğinde = Bu gibi (her zaman dikkate beyaz boşluk Takin) content özelliğinin her tarafında "yenileme" için kontrol edebilirsiniz:

<?
  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>";
?>

Çıktı:

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

You could, using the same approach. add support for taking into account the parts.
Also, remember always to run regexes with i option, to enable case insensitive match.