小组不在正则表达式中工作

时间:2011-11-10 21:26:45

标签: c# regex

我写了一个正则表达式来查找html元素的id值:

<.+ id\s*=\s*["'](.+)["'].*/?>

对于大多数情况,它会返回id值,但不会返回此值:

<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />

它匹配以下组值:

__EVENTTARGET" value="

而不是预期的__EVENTTARGET

正则表达式有什么问题?

3 个答案:

答案 0 :(得分:3)

正则表达式不是解析HTML的最佳工具。

您可以尝试制作non-greedy

<.+ id\s*=\s*["'](.+?)["'].*/?>
                    ^

然而,在其他例子中它仍然可能失败。最好使用HTML解析器,例如HTML Agility Pack

答案 1 :(得分:2)

你的表达式(.+)是“贪婪的” - 它尽可能地匹配。

有两种解决方案:

“懒惰”(非贪婪):这将匹配尽可能少的字符

(.+?)

或更好的解决方案,而不是匹配.,您应该匹配[^'"]

([^'"]+)

答案 2 :(得分:1)

'+'是贪婪的!,然后在消耗=之后进入'id'然后“它想要更多吃。它可以随后吞噬它直到它到达最终”然后为你吐出来。 / p>

那披萨准备好了,亲爱的!