正则表达式最后不匹配

时间:2009-09-01 21:14:33

标签: c# .net regex

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

<td style="alskdjf" />

即。自我终止<td>

但不是这样:

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

我最初想出的是:

<td\s+.*?/>

但是第二个例子显然失败了,我认为这样的事情可能有用:

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

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

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

3 个答案:

答案 0 :(得分:4)

由于HTML不常规,因此使用HTML的regexp会遇到问题。除了最简单的情况外,我建议使用HTML解析器。

答案 1 :(得分:4)

这将与您正在寻找的内容相匹配,并且不符合您在前几次尝试时出现的问题:

<td[^>]*?/>

但请注意,如果您需要在属性值中允许>个字符,则需要以下内容:

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

仅在匹配的双引号内允许>(您可以类似地扩展它以允许单引号)。

您可以将正在寻找的任何特定属性添加到正则表达式中;例如:

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

答案 2 :(得分:2)

正如批量浏览器经常需要处理的那样,正则表达式在解释凌乱的HTML时会遇到严重的麻烦。可以对标记进行各种可怕的混淆,你不需要考虑这些混淆!

HTML Agility Pack是您真正想要使用的内容,并且在我看过的每个地方都有非常好的评论。它是一个强大的库,用于将任何类型的错误HTML读入DOM模型。我个人发现它是一个极好的库,肯定有其他人,很多人在商业应用程序的上下文中使用库。