preg_match用于获取数据的未知修饰符

时间:2016-03-14 08:46:58

标签: php html preg-match delimiter

我有一个网站,需要从其他网站上读取信息。并展示它。

目前我正在使用其他网站作为示例。但是它还没有用。

我的代码:

function getHTML($url,$timeout)
{
       $ch = curl_init($url); // initialize curl with given url
       curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]); // set  useragent
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // write the response to a variable
       curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // follow redirects if any
       curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); // max. seconds to execute
       curl_setopt($ch, CURLOPT_FAILONERROR, 1); // stop when it encounters an error
       return @curl_exec($ch);
}

$html=getHTML("https://www.sparkfun.com/",10);
preg_match("/<title>(.*)</title>/i", $html, $match);
$title = $match[1];

如果是对的,它应该给我页面的标题。

但是我收到了这个错误:

Warning: preg_match(): Unknown modifier 't'

我在这一行得到错误:

preg_match("/<title>(.*)</title>/i", $html, $match);

现在我已经阅读了有关分隔符的内容。但是我还是想不通:/

有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您正在模式中使用正则表达式分隔符(/),这当然是不允许的。所以要么使用另一个分隔符(|可能),要么在

中转义正斜杠
preg_match("|<title>(.*)</title>|i", $html, $match)

通过尝试,正则表达式引擎期望模式本身在第二个斜杠(</title内部)之后完成,并将其后的所有内容视为修饰符。斜杠后面的第一个字符是t,因此它会抱怨未定义的修饰符t

&#34;分隔符&#34;用于&#34; perl兼容的正则表达式&#34; (pcre_...()函数)标记实际表达式模式的起始端。这使得编译模式更多更有效(节省时间)。但是它有副作用,无论你用作分隔符的任何字符(通常是/,但实际上你可以选择任何字符)都不能直接在模式本身内部使用。出于显而易见的原因,一旦你想到它。

这些都记录在案:http://php.net/manual/de/regexp.reference.delimiters.php