我想檢查字符串是否爲十六進制。下面的代碼工作正常。十六進制字符
[0-9A-F]+
在某些情況下,將有字符 'X' 像插圖中,
1234X3D
X12353D
1234E3X
有人可以幫助我在改變這個正則表達式?
我想檢查字符串是否爲十六進制。下面的代碼工作正常。十六進制字符
[0-9A-F]+
在某些情況下,將有字符 'X' 像插圖中,
1234X3D
X12353D
1234E3X
有人可以幫助我在改變這個正則表達式?
沒有質疑爲什麼你要考慮X爲十六進制數字,正確回答你的問題是:
[0-9A-FX]+
無處這是否正則表達式需要一個「X」存在。 雖然這是可以接受的,以及:
([0-9A-F]+)|([0-9A-FX]+)
這是不必要的複雜,和冗餘。這是因爲[0-9A-F] +是[0-9A-FX] +的子集。考慮DFA在這裏創建:
DFA1:[0-9A-F] +
Accepting: state 1
State 0 input: 0-9A-F to state 1
State 1 input: 0-9A-F to state 1
DFA2:[0-9A-FX] +
Accepting: state 1
State 0 input: 0-9A-F to state 1
State 0 input: X to state 1
State 1 input: 0-9A-F to state 1
State 1 input: X to state 1
注意,所有的接受狀態目前在DFA1中的轉換也存在於DFA2中。因此DFA1([0-9A-F] +)的匹配輸入是DFA2的一個子集([0-9A-FX] +)
或者,更簡明地:
([0-9A- F] +)⊆([0-9A-FX] +)
並且如果⊆B,則A | B = B
因此([0-9A-F] +)|([O- 9A-FX] +)= [0-9A-FX] +。
QED
+1集合論! – slebetman
'[0-9A-FX] +'是否足夠? – femtoRgon
'X'不是我書中的十六進制字符... –
是的,我試過了。只有在某些情況下,字符'X'出現。所以它應該是一個可選的 – FirmView