我有一个看起来像这样的html文件:
<table>
<tr>
<td sadf="a">
<a href="">asdf</a>
</td>
</tr>
</table>
我想要做的事情,使用Perl正则表达式,删除td标记中所有内容的除了。所以我希望输出为:
<td sadf="a">
<a href="">asdf</a>
</td>
请帮帮我。感谢
答案 0 :(得分:3)
html解析器在这项任务上要好得多,但如果你坚持使用正则表达式,试试这个:
<td[\s\S]*?</td>
在结束标记</td>
之前,它与尽可能少的任何字符匹配。
答案 1 :(得分:3)
尝试使用XML::Simple。正如其他人所指出的那样,你不能使用正则表达式来解析XML。
XML::Simple
会将您的HTML转换为哈希结构。从那里,您可以轻松找到“td”元素,并将整个事物复制到另一个哈希引用。然后,您可以使用XML :: Simple将其重新转换为HTML。
XML :: Simple不能保证XML中的结构相同(尽管它在语法上是相同的)。但是,我很少将HTML转换为hashref并返回HTML。
答案 2 :(得分:1)
更简单的思考方法是,您希望使用正则表达式获取标记部分(而不是删除除标记部分之外的所有内容)。
在这种情况下,正则表达式很简单,对于第一行可能看起来像这样:例如:<td \w+?="\w*">
(您可以匹配\ n来抓取多行块)。如果你不知道你的正则表达式究竟发生了什么变化就很难回答,但是如果你遵循像this one这样的引用你应该没问题。
此外,最好不要使用正则表达式(完全使用HTML解析器),如果它不仅仅是有限的特定抓取。我假设你知道你想要使用正则表达式,但是如果你手上有一个非常基本的搜索模式,那么你有更好的方法可以做到这一点。