繁体   English   中英

正则表达式末尾不匹配

[英]Regex with not match at end

我正在尝试编写一个正则表达式来匹配这样的模式:

<td style="alskdjf" />

即自终止<td>

但不是这个:

<td style=alsdkjf"><br /></td>

我最初想出了:

<td\s+.*?/>

但这显然在第二个示例中失败了,我认为这样的方法可能会起作用:

<td\s+.*?[^>]/>

但事实并非如此。 我正在使用C#.NET。

仅查找具有属性的<td> 例如,寻找<td style="alsdfkj" />而不是<td>

由于HTML不是常规的,因此将正则表达式与HTML结合使用将会遇到问题。 除了最简单的情况,我建议对所有其他情况都使用HTML解析器。

这将与您要查找的内容相匹配,而与您最初尝试几次时遇到的有问题的案例不匹配:

<td[^>]*?/>

但是请注意,如果需要在属性值中允许>字符,则需要如下所示:

<td(?:[^>]|"[^"]*?")*?/>

它允许>仅在匹配的双引号(你可以同样展开它允许单引号)。

您可以将要查找的任何特定属性添加到正则表达式中。 例如您的示例:

<td[^>]*? style="alskdjf"[^>]*?/>

正则表达式在解释凌乱的HTML时会遇到严重的麻烦,这是浏览器通常必须处理的问题。 对于您不想考虑的标记,可以进行各种各样的令人困惑的混淆!

HTML Agility Pack是您真正想要使用的,并且在我见过的所有地方都有很好的评价。 它是一个健壮的库,用于将任何类型的损坏的HTML读取到DOM模型中。 我个人发现它是一个极好的库,当然还有其他库,其中许多库是在业务应用程序上下文中使用的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM