RegExp令人困惑的行为

时间:2013-05-03 21:35:14

标签: php regex

我正在尝试匹配PHP中的下一个表达式:

preg_match( '#<head>([\s\S]*)</head>#' , $this -> $html_file_content , $match );

没有成功。

$this -> $html_file_content包含有效的HTML代码,<head>块不为空。

这个正则表达式在JavaScript中非常有用。

我已经尝试了下一个版本:

#<head>([.\s\S]*)</head>#
#<head>([.\s\S]+)</head>#
#<head>([\s\S]*)<\/head>#
#<head>([\s\S]+)<\/head>#

所有这些都在JavaScript中运行良好。我只是想不通,为什么PHP中没有匹配。

你们能帮助我处理它吗?

2 个答案:

答案 0 :(得分:1)

我无法重现这一点,所以我的猜测是$this -> $html_file_content应该是

$this -> html_file_content

如果不起作用,可以尝试使用SimpleXML,假设内容格式正确。

$html = new SimpleXMLElement($html_file_content);
$head = "" . $html->head;

“你不应该使用正则表达式来解析HTML”的常见答案是错误的。据我所知,你没有尝试parse HTML;你只想从已知的分隔符中提取字符串值。如果分隔符是[head]...[/head]

,没有人会说什么

答案 1 :(得分:0)

你说必须只有更多的太空元素,但你需要有任何文字,包括空格试试这个(。*?)我没试过,但我希望这是正确的

/&LT(*); /头&GT; /