正则式高人谈解答正则式的心得
條件1: 長度為14個字符
條件2: 其中任意9個位置為數(shù)字,并且數(shù)字只能是(0,1,3)
條件3: 其余的位置全部為"-"符號
------------------------------------------ 求一個正則表達式
?答案為:^(?!(.*?-){6,})(?!(.*?\d){10,})[013-]{14}$
以下是高人提出的解答思路,本人是受益匪淺,同時也貼出來方便大家學(xué)習(xí),共同進步。
首先是正則問題的需求:
1、目的
2、規(guī)律或規(guī)則
3、應(yīng)用環(huán)境
當我看到一個正則問題的時候,我希望看到的是一個以上三點都明確的問題
目的:希望用正則來做什么?驗證規(guī)則,提取,替換,分割等等。
規(guī)律或規(guī)則:符合什么樣的規(guī)律,或者是應(yīng)遵守什么樣的規(guī)則。
應(yīng)用環(huán)境:正則用于.NET程序中,還是驗證控件或javascript中。
另外就是一些細節(jié)的描述,比如提取是提取一條,還是同時提取多條等等。這方面當然是越詳細越好,有利于問題的盡快解決。
接下來談一談樓主這個問題
首先,可以看出這需要的是一個驗證規(guī)則的正則表達式。所以通常情況下,前面的“^”和后面的“$”是必不可少的。
接著是內(nèi)容,字符固定(0、1、3、-)之一,位數(shù)固定,14位,那么基本的正則可以寫出
^[013-]{14}$
現(xiàn)在還剩下兩個需求:9個數(shù)字,5個-,但位置不固定。
還有一點是樓主沒有明確的,就是應(yīng)用環(huán)境,如果是在.NET程序中,盡可以用各種方法來實現(xiàn),甚至走一個極端,用窮舉法列出各種可能,然后用“|”或的關(guān)系組成一個正則,但那僅僅是一個極端而已,不通用,也無擴展性可言,再就是如果位數(shù)多一些,會累死的^o^
既然不能一一列舉可能性,就要把它作為條件來寫這個正則,可以用作條件的,就是正反向預(yù)搜索了
(?<=Exp)、(?<!Exp)、(?=Exp)、(?!Exp)
考慮到通用性和擴展性,放棄使用前三個,以上四個,.NET都支持,但是前兩個js中不支持,第三個js雖然支持,但是并不穩(wěn)定,所以棄用。
那么現(xiàn)在就只是使用(?!Exp)做為條件了,思路確定,接下來是實現(xiàn),至于(?!Exp)的詳細說明,參考一下相關(guān)教程吧,這里不做說明
(?!(.*?-){6,})
(?!(.*?\d){10,})
前一個限制“-”字符不能超過5個,后一個限制數(shù)字不能超過10個,再加上后面的{14}把字符數(shù)限制在14位,三個條件加起來,那就是9個數(shù)字,5個-,總數(shù)為14個^o^
分析過程是正向思維,最后的實現(xiàn)可以算是逆向思維,至于怎么想到,呵呵,或許可以算做是一點經(jīng)驗吧。
轉(zhuǎn)載于:https://www.cnblogs.com/symbol441/archive/2007/09/18/897250.html
總結(jié)
以上是生活随笔為你收集整理的正则式高人谈解答正则式的心得的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 孤独的个性签名女生
- 下一篇: Request.ServerVariab