我写了一个正则表达式来查找html元素的id值:
<.+ id\s*=\s*["'](.+)["'].*/?>
对于大多数情况,它会返回id值,但不会返回此值:
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
它匹配以下组值:
__EVENTTARGET" value="
而不是预期的__EVENTTARGET
。
正则表达式有什么问题?
答案 0 :(得分:3)
正则表达式不是解析HTML的最佳工具。
您可以尝试制作non-greedy:
<.+ id\s*=\s*["'](.+?)["'].*/?>
^
然而,在其他例子中它仍然可能失败。最好使用HTML解析器,例如HTML Agility Pack。
答案 1 :(得分:2)
你的表达式(.+)
是“贪婪的” - 它尽可能地匹配。
有两种解决方案:
“懒惰”(非贪婪):这将匹配尽可能少的字符
(.+?)
或更好的解决方案,而不是匹配.
,您应该匹配[^'"]
:
([^'"]+)
答案 2 :(得分:1)
'+'是贪婪的!,然后在消耗=之后进入'id'然后“它想要更多吃。它可以随后吞噬它直到它到达最终”然后为你吐出来。 / p>
那披萨准备好了,亲爱的!