我正在使用正则表达式来查找位于
内的整个文本堆<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
和一个标注菜单结尾的标签......看起来像这样:
<!--END MENU-->
这是我写的代码,但它并没有吐出匹配的文字:
$value = preg_match('/^<!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD XHTML 1.0 Transitional\/\/EN\" \"http:\/\/www.w3.org\/TR\/xhtml1\/DTD\/xhtml1-transitional.dtd\">(.*?)<!--END MENU-->/',$content, $matching_text);
echo $matching_text[0]
答案 0 :(得分:2)
虽然我通常会同意 Andy ,但您应该能够根据特定的开头和结尾解析HTML字符串的这一部分。
.
(点)与没有m
修饰符的换行符不匹配。把它放在你的正则表达式模式的末尾并给它一个镜头。
答案 1 :(得分:1)
您无法使用正则表达式可靠地解析HTML。改为使用HTML解析器。
答案 2 :(得分:1)
首先,您的正则表达式中的某些字符需要转义,例如点。
其次,即使您当前的正则表达式有效,它也不会匹配许多HTML文档,因为您的要求太具体了。
在我的意见中,你应该使用这个正则表达式:
/<!doctype\s*html\b[^><]+>(.*?)<!--\s*end\s+menu\s*-->/ism