當我使用正規表示式的時候發現了很詭異的現象,如下:
[--ˇ]
[_-ˇ]
[=-ˇ]
就是第一個不能匹配字母,第二個能匹配字母,第三個能匹配字母和斜杠
我只是希望在字符串裡出現這幾個特殊字符就替換,沒想到連字母都替換了,我知道能用其他寫法實現此需求,但我就是不知道這樣寫為什麼會這麼詭異,大神們解釋下這個正則。
臥槽還有這幾個,寫個正則這麼費勁兒
[+-~]
[i-~]
[--~]
[_-~]
[=-~]
...
有興趣就跟hello world
配對測試一下。
我想大声告诉你2017-05-16 13:09:23
首先,第一個例子應該不是個合法正規則,所以不會有結果。
而後面的兩個例子中的正則是最基礎的 [a-z]
語法,表示匹配從一個字符到另一個字符編碼之間的所有字符。
兩個例子中,起始字元分別是 _
、=
, 终止字符都是全角符号 ˇ
。
全角符號編碼大於所有 ASCII 編碼,所有在匹配 AscII 編碼時都匹配,不用多考慮,我們查下起始字元的 ASCII 編碼。
ASCII 編碼中:/
< 0-9
< =
< A-Z
< <
_
< a-z
所以, [=-ˇ]
能匹配大写字母、反斜杠、小写字母,[_-ˇ]
只能匹配小寫字母,兩者都不能匹配正斜杠和數字。
其次,這麼奇怪的正則還是不要寫為好,很難維護。