[英]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.