2016-01-18 35 views
-1

我在Python編寫laxer C和麪臨這樣的問題:正則表達式整數識別錯誤蟒蛇

這是我的職責,以確定整數:

def t_INT_CONSTANT(t): 
    r'(\d+ | 0b[0-1]+)' 
    t.type = reserved_map.get(t.value,"INT_CONSTANT") 
    return t 

,我用它來識別十進制和二進制整數。

問題是,當表達式爲0b101010時,它使0 int和b101010標識符(在此之上定義的另一個函數)。

它與效果很好:

#r'(0b[0-1]+ | \d+)' 

什麼是第一個問題呢?爲什麼第二次工作?

回答

1

。注意,通過第一圖案相匹配的字符(即,前向|它存在圖案),不會被第二圖案(對|右側圖案)相匹配。

如果使用正則表達式\d+|0b[0-1]+,第一\d+應該匹配剛剛之前b0b101010存在0。當正則表達式引擎使用第二個模式0b[0-1]+時,它不會找到任何匹配項。

如果您顛倒0b[0-1]+|\d+這樣的模式,現在它會首先檢查0b[0-1]+。所以根據優先級放置模式。左側的圖案優先於右側的圖案。