我有一个网站,需要从其他网站上读取信息。并展示它。
目前我正在使用其他网站作为示例。但是它还没有用。
我的代码:
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);
现在我已经阅读了有关分隔符的内容。但是我还是想不通:/
有谁知道如何解决这个问题?
答案 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