正则表达式有助于返回包含/不包含/ n标签等的页面标题

时间:2010-09-28 08:21:18

标签: php regex

我一直在寻找能够返回所有页面标题的正则表达式的年龄。 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);

显然链接会发生变化 感谢

5 个答案:

答案 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);