只提取下面的第二行,适当的Perl或Java正则表达式是什么?它应该找到包含 class =“matchthis”属性的div标记。
<div>Do not match this</div>
<div class="matchthis">MATCH THIS</div>
<div class="unimportant">Do not match this</div>
请不要告诉我使用DOM / Soup / etc。我想知道原始正则表达式是否可以解决上面的简单问题(你将获得答案!)。是的我知道this post所以不要提及它。
答案 0 :(得分:3)
正如您已经知道的那样,使用正则表达式来解析HTML是一个坏主意。
在这个特定的案例中,我非常确定你真正想要的是:
<div class="lulz">(.*)<\/div>
现在,您想要获得的灵活性越强,您的正则表达式就越难以理解。这是尝试使用正则表达式而不是正确的解析器的危险。例如,假设您希望允许除class
之外的其他属性。 类型的函数正则表达式可能如下所示:
<div[^>]*class="[^\"]*lulz[^\"]*".*>(.*)<\/div>
完全可读,对吧? (而且,几乎肯定是非常错误的。)
答案 1 :(得分:1)
如果<div>
中没有嵌套代码,则可以使用此
/<div[^>]+class="matchthis"[^>]*>[^>]*<\/div>/
否则你需要知道里面是什么或不同的解决方案(如你所知)。
答案 2 :(得分:0)
如果您只对标签之间的文字感兴趣,而不是整行,则可以使用外观。
有了这个正则表达式,
m{(?<=<div class="matchthis">)([^<]+)(?=</div>)}
你可以在$ 1变量中的标签之间获取文本;请注意,第二组圆括号是捕获括号。
第一组和最后一组圆括号是正面的,它们不会捕获文本。
无论如何,其他人已经给出了建议:不要(ab)在HTML上使用正则表达式。