我一直在寻找能够返回所有页面标题的正则表达式的年龄。 unfortuantley有一些在他们和其他wiered东西中的换行标记阻止我找到结果。
这里有一些我试过的正则表达式
"/\<title.*\>(.+)\<\/title\>/"
"#\<title.*\>(.+)\<\/title\>#s"
但是没有一个用/ n标签返回标题 请有人帮帮我吗?
非常感谢 路加这是完整的代码
$data = file_get_contents("http://www.awin1.com/pclick.php?p=116824093&a=79524&m=2694&platform=cs");
$subject = $data;
$pattern = '#<title.*>(.+)</title>#s';
preg_match($pattern,$subject,$matches);
var_dump($matches);
显然链接会发生变化 感谢
答案 0 :(得分:1)
只要你打开'点匹配换行符',这就可以了:
<title>.*?</title>
对于'dot match newline',您必须在PHP中使用/s
对正则表达式进行后缀。
preg_match("/<title>(.*?)</title>/s", someTextToSearch)
答案 1 :(得分:1)
首先,您是否考虑过使用PHP的DOM函数而不是正则表达式?在尝试解析html时,使用正则表达式可能非常充实。
如果您仍想使用正则表达式...
1)点运算符(您已经使用过的)匹配“除换行符之外的任何字符”。但是,您可以选择将其切换为“包括换行符在内的任何字符”。
2)或者你可以继续使用点,加上\n
和\r
这两个你可能会遇到的换行符 - 所以(.|\n|\r)
你当前只有点。
3)另一种方法是在执行正则表达式之前使用str_replace()去除所有换行符。 (这不会影响浏览器中的html输出。)
答案 2 :(得分:0)
对我而言,它的工作正常(使用\ n)
$sgml = <<<HTML
<title>fooo bar ? \n
baz! </title>
HTML;
preg_match('#\<title.*\>(.+)\<\/title\>#s',$sgml,$matches);
var_dump($matches); // dumps array(2) { [0]=> string(33) "" [1]=> string(18) "fooo bar ? baz! " }
或者我明白你错了吗?
答案 3 :(得分:0)
$data = file_get_contents("http://www.awin1.com/pclick.php?p=116824093&a=79524&m=2694&platform=cs");
$subject = $data;
preg_match('!<title?[^>]+>(.+)</title>!is', $subject, $matches);
var_dump(trim($matches[1]));
答案 4 :(得分:0)
我无法让这个页面上的任何解决方案100%工作 - 一些标题标签有换行符,有些标签有标签,有些标签不规则。在所有这些情况下,正则表达式都会失败。
因此,我找到的最好的包容性表达(&amp;测试)是这样的:
$res = preg_match('/<title>(.*?)<\/title>/is', $fp, $title_matches);