是的,我知道在html上使用正则表达式不是首选,但我仍然感到困惑,为什么这不起作用:
我正试图从文件中删除“头” 这是doc:
<html>
<head>
<!--
a comment within the head
-->
</head>
<body>
stuff in the body
</body>
</html>
我的代码:
$matches = array(); $result = preg_match ('/(?:<head[^>]*>)(.*?)(<\/head>)/is', $contents, $matches);
var_dump ($matches);
这实际上不起作用。 这是我看到的输出:
array(3) { [0]=> string(60) " " [1]=> string(47) " " [2]=> string(7) "" }
但是,如果我调整HTMl doc没有评论
我缺少什么?
谢谢!
答案 0 :(得分:4)
您的正则表达式看起来很好,但提取 <head>
;你想删除头部。请尝试使用preg_replace
代替:
$without_head = preg_replace ('/(?:<head[^>]*>)(.*?)(<\/head>)/is', '', $contents);
答案 1 :(得分:1)
php > $str=<<<EOS
<<< > <head>
<<< > <!--
<<< > a comment within the head
<<< > -->
<<< > </head>
<<< > EOS;
php > $r=preg_match('/(?:<head[^>]*>)(.*?)(<\/head>)/is',$str,$matches);
php > var_dump($r);
int(1)
php > var_dump($matches);
array(3) {
[0]=>
string(63) "<head>
<!--
a comment within the head
-->
</head>"
[1]=>
string(50) "
<!--
a comment within the head
-->
"
[2]=>
string(7) "</head>"
}
你的意思是使用preg_replace吗?
php > $r=preg_replace('/(?:<head[^>]*>)(.*?)(<\/head>)/is','',$str);
php > var_dump($r);
string(0) ""
答案 2 :(得分:1)
您的脚本工作正常,由于转储中的HTML而无法正确显示(您可以通过var_dump
输出中的长度来判断)。尝试:
$result = preg_match ('/(?:<head[^>]*>)(.*?)(<\/head>)/is', $contents, $matches);
ob_start(); // Capture the result of var_dump
var_dump ($matches);
echo htmlentities(ob_get_clean()); // Escape HTML in the dump
此外,如上所述,您需要使用preg_replace
将匹配替换为''
,以便实际删除头部。