2013-05-03 51 views
0

我想下一个表达式在PHP搭配:RegExp的混乱行为

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中没有匹配。

你们能帮我处理吗?

+0

请也张贴的价值'$此 - > $ html_file_content' – Ejaz 2013-05-03 21:37:11

+1

笼统的回答:你不应该使用正则表达式来处理与HTML。 – 2013-05-03 21:37:11

+0

'var_dump($ match);'给你什么?你可以考虑在最后一个'#'之后加上'm'使它与多行匹配。 – Jon 2013-05-03 21:37:42

回答

1

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

$this -> html_file_content 

在不工作的情况下,可能与SimpleXML尝试假设的内容都能很好地形成。

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

的“你不应该使用正则表达式解析HTML”共同的答案是错误的。据我所知,你并不是想要HTML;你只是想从已知的分隔符中提取一个字符串值。没有人会说如果分隔符是[head]...[/head]

+0

其实,你的猜测是正确的。写了一整天之后,我看不到这样的错误......'$'符号不应该在那里。 – 2013-05-03 21:48:15

0

你说只能在矿石上有更多的空间元素,但是你需要有任何文本包括空格试试这个(。*?)我没有尝试但是我希望这是正确的

/(.*)</HEAD>/

+0

'.'不会与没有's'修饰符的换行符匹配 – 2013-05-03 21:50:29

+0

事实上,'[\ s \ S] *'匹配所有字符,包括间隔符 – 2013-05-03 21:52:50