0

我正在尝试匹配 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 中没有匹配项。

各位大佬能帮我处理一下吗?

4

2 回答 2

1

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

$this -> html_file_content

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

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

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

于 2013-05-03T21:44:59.087 回答
0

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

/(.*?)</head>/

于 2013-05-03T21:49:48.263 回答