2011-11-10 72 views
3

工作,我寫了一個正則表達式查找HTML元素的ID值:集團不是在正則表達式

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

在大多數情況下,它返回ID值,但不是這一個:

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

它匹配以下組值:

__EVENTTARGET" value=" 

而不是預期的__EVENTTARGET

正則表達式有什麼問題?

+0

你使用什麼語言? –

+0

@Mark Byers C#如果你的意思是這樣,但這裏沒關係,因爲所有正則表達式測試工具都返回相同的結果。 – Centro

+1

@Centro當談到正則表達式時,總會提到「風味」,包括.NET,PCRE,Java等。 –

回答

2

你的表情(.+)是「貪婪」 - 它儘可能匹配。

有2個解決方案:

「懶惰」(非貪婪):這將匹配儘可能少的字符可能

(.+?) 

或更好的解決方案,而不是匹配.你應該匹配[^'"]

([^'"]+) 
3

正則表達式不是解析HTML的最佳工具。

你可以嘗試使它non-greedy

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

但是它仍然可能失敗的其他例子。最好使用HTML解析器,如HTML Agility Pack

1

的「+」是貪婪!消耗=然後之後得到的「身份證」,那麼「它希望有更多的吃,可以再狼吞虎嚥本身ü只是它達到了最終的「,並吐出了你。

是比薩準備好了,親愛的!