工作,我寫了一個正則表達式查找HTML元素的ID值:集團不是在正則表達式
<.+ id\s*=\s*["'](.+)["'].*/?>
在大多數情況下,它返回ID值,但不是這一個:
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
它匹配以下組值:
__EVENTTARGET" value="
而不是預期的__EVENTTARGET
。
正則表達式有什麼問題?
工作,我寫了一個正則表達式查找HTML元素的ID值:集團不是在正則表達式
<.+ id\s*=\s*["'](.+)["'].*/?>
在大多數情況下,它返回ID值,但不是這一個:
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
它匹配以下組值:
__EVENTTARGET" value="
而不是預期的__EVENTTARGET
。
正則表達式有什麼問題?
你的表情(.+)
是「貪婪」 - 它儘可能匹配。
有2個解決方案:
「懶惰」(非貪婪):這將匹配儘可能少的字符可能
(.+?)
或更好的解決方案,而不是匹配.
你應該匹配[^'"]
:
([^'"]+)
正則表達式不是解析HTML的最佳工具。
你可以嘗試使它non-greedy:
<.+ id\s*=\s*["'](.+?)["'].*/?>
^
但是它仍然可能失敗的其他例子。最好使用HTML解析器,如HTML Agility Pack。
的「+」是貪婪!消耗=然後之後得到的「身份證」,那麼「它希望有更多的吃,可以再狼吞虎嚥本身ü只是它達到了最終的「,並吐出了你。
是比薩準備好了,親愛的!
你使用什麼語言? –
@Mark Byers C#如果你的意思是這樣,但這裏沒關係,因爲所有正則表達式測試工具都返回相同的結果。 – Centro
@Centro當談到正則表達式時,總會提到「風味」,包括.NET,PCRE,Java等。 –