所謂正規表示式,就是用乙個特定的表示式完成字串匹配的工作,我們可以規定什麼字元以什麼方式出現,出現多少次,前後需要有什麼,然後提取出符合這個要求的字串或者判斷某個字串是否符合這個要求。
元字元**/語法說明.
匹配除換行符以外的任意字元
w匹配字母或數字或下劃線或漢字
s匹配任意的空白符
d匹配數字
b匹配單詞的開始或結束
^匹配字串的開始
$匹配字串的結束
一下是上面部分字元的反義
**/語法說明w
匹配任意不是字母,數字,下劃線,漢字的字元
s匹配任意不是空白符的字元
d匹配任意非數字的字元
b匹配不是單詞開頭或結束的位置
還有一組具有反義的表示式:
**/語法
說明[aeiou]
匹配aeiou中任一字元
1匹配除了aeiou這幾個字母以外的任意字元
轉義字元
**/語法說明a
響鈴t製表符r
回車符n
換行符f
換頁符b退格e
escv
垂直製表符
cc控制字元(如ctrl+c)
040八進位制(0開頭)
x20十六進製制(x開頭)
ua0ff
unicode字元
g當前搜尋的開頭
a必須出現在字串開頭
z必須實現在字串結尾或\n
之前
z必須實現在字串結尾
注1在中,正規表示式中有含義的字元都要再前方加\
轉義。如\
寫作\\
注2b在中才表示退格,在外面表示單詞邊界
注3正規表示式不允許雙引號**現單引號
注意換行的回車不是乙個東西,雖然我們看上去是一樣的。這個和編碼發展歷史有關,區別見下表:
unicode序列
正則名稱
簡寫描述
u+000du+000a
(rn)
回車換行
crlf
windows,dos中的文字檔案
u+000d
(r)回車
cr舊版的macos中的文字檔案
u+000a
(n)換行
lfunix,linux,bsd和osx中的文字檔案
限定符貪婪的**/語法說明*
重複零次或更多次
+重複一次或更多次
?重複零次或一次
重複n次
重複n次或更多次
重複n到m次
非貪婪的
**/語法
說明*?
重複任意次,但盡可能少重複
+?重複1次或更多次,但盡可能少重複
??重複0次或1次,但盡可能少重複
?重複n到m次,但盡可能少重複
?重複n次以上,但盡可能少重複
分組我們已經提到了怎麼重複單個字元,但如果想要重複多個字元又該怎麼辦?你可以用小括號來指定子表示式(也叫做分組),然後你就可以指定這個子表示式的重複次數了。 比如
(?#這一行是個注釋,注釋這樣寫)
^abc (?#匹配ab開頭後面2個及以上c)
^a(bc) (?#匹配a開頭後面2個及以上bc)
每乙個()
中的變數都會被分配乙個編號((?:exp)
除外),按()出現順序,從左到右,從外到內編號,從1開始。編號0預設代表整個表示式。可以利用\
+ 編號的形式訪問對應編號的匹配。例如:
<([^>]*)>[^<>]* (?#匹配一對不含子標籤的xml標籤及裡面的內容)
在.net中,可以用(?exp)
為表示式命名,此時,該表示式也同時具有編號,可以用\k
訪問這個表示式。需要注意的是,系統會按從左到右,從外到內的順序給沒有名字的表示式編號,然後再從頭開始按從左到右,從外到內的順序給有名字的表示式編號。
當然還有一些有意義的括號,除了(?:exp)
以外,都會帶有編號。下面是完整的分組說明:
**/語法
說明(exp)
普通分組
(?exp)
名為name的分組
(?:exp)
匹配字串exp,但不為其分配組號
零寬度斷言
何為斷言:斷言某個位置會出現,或不會出現某個模式,但不去匹配這個模式。當斷言不成功時,不再匹配。
**/語法
說明(?=exp)
匹配字串exp前面的位置
(?<=exp)
匹配字串exp後面的位置
(?!exp)
匹配後面不是字串exp的位置
(?匹配前面不是字串exp的位置
(?>exp)只匹配exp一次
邏輯運算子 或
**/語法說明\
邏輯或 遞迴匹配
這個和上面的分組命名不矛盾,這個就是那個部分的擴充套件。
**/語法
說明(?exp)
把匹配的內容命名為name,入棧
(?<-name>exp')
從棧中彈出乙個內容
(?(name) yes \
no)如果棧中存在名為name的內容就匹配yes部分,否則匹配no部分,這裡yes和no分別是2段表示式
運算子優先順序
從上到下從高到低,同一高度順序運算
優先順序轉義字元
() ,
* , + , ? , , ,
^ , $ , 元字元
\驗證數字型別輸入
驗證字串型別輸入
驗證特殊型別輸入
網域名稱:[a-za-z0-9][-a-za-z0-9](/.[a-za-z0-9][-a-za-z0-9])+/.?
interneturl:[a-za-z]+://[^\s]*
或^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
手機號碼:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d$
**號碼(「***-******x」、」***x-******xx」、」***-******x」、」***-******xx」、」******x」和」******xx):^($$\d-)|\d-)?\d$
國內**號碼(0511-4405222、021-87888822):\d-\d|\d-\d
身份證號(15位、18位數字):^\d|\d$
短身份證號碼(數字、字母x結尾):^([0-9])(x|x)?$
或^\d|[0-9x]|[0-9x]?$
帳號是否合法(字母開頭,允許5-16位元組,允許字母數字下劃線):^[a-za-z][a-za-z0-9_]$
密碼(以字母開頭,長度在6~18之間,只能包含字母、數字和下劃線):^[a-za-z]\w$
強密碼(必須包含大小寫字母和數字的組合,不能使用特殊字元,長度在8-10之間):^(?=.*\d)(?=.*[a-z])(?=.*[a-z]).$
日期格式:^\d-\d-\d
一年的12個月(01~09和1~12):^(0?[1-9]|1[0-2])$
乙個月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
錢的輸入格式:1到3個數字,後面跟著任意個逗號+3個數字,逗號成為可選,而不是必須。小數可有可無,但最多2位:^([0-9]+|[0-9](,[0-9])*)(.[0-9])?$
xml檔案:^([a-za-z]+-?)+[a-za-z0-9]+\\.[x|x][m|m][l|l]$
中文字元的正規表示式:[\u4e00-\u9fa5]
雙位元組字元:[^\x00-\xff]
空白行的正規表示式:\n\s*\r
html標記的正規表示式:<(\s*?)[^>]*>.*?|<.*? />
首尾空白字元的正規表示式:^\s*|\s*$
或(^\s*)|(\s*$)
aeiou ↩
RegExp正規表示式
什麼是 regexp?regexp 是正規表示式的縮寫。當您檢索某個文字時,可以使用一種模式來描述要檢索的內容。regexp 就是這種模式。簡單的模式可以是乙個單獨的字元。更複雜的模式包括了更多的字元,並可用於解析 格式檢查 替換等等。您可以規定字串中的檢索位置,以及要檢索的字元型別,等等。var ...
正規表示式 RegExp()
字串處理 split 分割字串 charat 0 提取某個字元 substring 1,5 獲取字串 search a 返回位子,否則 1 正規表示式 字串匹配工具 str.match d g 所有匹配以陣列的形式返回 風格 風格 var re new regexp a var str abcdef...
正規表示式REGEXP
正規表示式 regular expression,regexp 元字元 匹配任意單個字元 匹配指定範圍內的任意單個字元 匹配指定範圍外的任意單個字元 字元集合 digit lower upper punct space alpha alnum 匹配次數 貪婪模式 匹配其前面的字元任意次 a,b,ab...