我需要一个正则表达式,它可以匹配结束标记,例如</something>
以及之后的任何和所有数据。请帮忙!
示例:
$html = '
<div id="footer">
<div class="wrap">
<strong class="logo"><a href="#">College</a></strong>
<ul><li><a href="#">Emergencies</a></li>
<li><a href="#">Contact</a></li>
<li><a href="#">Copyright</a></li>
<li><a href="#">Terms of Use</a></li>
<li><a href="#">Member of The Colleges</a></li>
</ul><p>© 2010 College</p>
</div>
</div>
</body></html>
li>
<li><a href="#">Contact</a></li>
<li><a href="#">Copyright</a></li>
<li><a href="#">Terms of Use</a></li>
<li><a href="#">Member of The Colleges</a></li>
</ul><p>© 2010 College</p>
</div>
</div>
</body></html>';
$html = preg_replace("#</html>.*#i", '', $html);
print ($html);
答案 0 :(得分:2)
您正在尝试使用正则表达式解析HTML。正则表达式不足以安全地解析HTML。你需要的是一个HTML解析器。看看PHP的DOM module。
答案 1 :(得分:0)
@"</[\da-zA-Z]+>.*"
或特定标签
@"</myTag>.*"
确保将正则表达式选项设置为忽略大小写。虽然确保解析xml的东西不是更有帮助。
答案 2 :(得分:0)
标签可以隐藏在评论,cdata,脚本和其他地方,和/或它可能只是无效。如果你说它不是任何类型的标记,你可以这样做:
/<\/something\s*>((?:(?!<\/something\s*>)[\S\s])+)/
然后在全局循环中剥离捕获组1。除非a(?:something | something_else | ...)
修改强>
您的示例不起作用,因为您没有使用/ s修饰符。它在Perl中工作为$html =~ s/<\/html>.*//s;
。此$html =~ s/<\/html>[\S\s]*//;
不使用/ s修饰符。
将您的更改为#</html>[\S\s]*#i
或使用/ s修饰符。点.
将匹配除换行符之外的任何字符。使用/ s修饰符它也会匹配换行符。
以及更多刚试过,请使用$html = preg_replace("#</html>.*#is", '', $html);
答案 3 :(得分:0)
我认为这不会改变你的想法,但可能正则表达式并不是从html中提取结尾标记的最好方法。杰夫阿特伍德写了一篇很好的文章,说明为什么这不是解决这一特定问题的最佳方法。