- 方括號
[ ]
只能匹配一個字符,稱為:字符類 或 字符簇印荔。
其中連字號-
在[ ]
中使用時表示一個字符的范圍低葫。
Example:
[a-z] // 匹配所有的小寫字母
[A-Z] // 匹配所有的大寫字母
[a-zA-Z] // 匹配所有的字母
[A-z] // 匹配所有的字母,同[a-zA-Z]
[0-9] // 匹配所有的數(shù)字
[0-9\.\-] // 匹配所有的數(shù)字仍律、句號嘿悬、減號
[ \n\f\r\t\v] // 匹配所有的空白字符(空格、換行符水泉、換頁符善涨、回車符、水平制表符茶行、垂直制表符)
-
^
除了表示字符串的開頭躯概,還有另外一個含義,即當在一組方括號里使用^
時畔师,它表示”非”或”排除”的意思娶靡,常常用來剔除某個字符。
Example:
[^a-z] // 匹配除了小寫字母以外的所有字符
[^\\\/\^] // 匹配除了\ / ^之外的所有字符
[^\”\’] // 匹配除了雙引號和單引號之外的所有字符
- 限定符
花括號{}
跟在字符或字符簇后面看锉,用來確定前面的內(nèi)容重復出現(xiàn)的次數(shù)姿锭,稱為限定符。
????????{3}
???表示:前面的字符或字符簇只出現(xiàn)3次;
????????{3,}
?表示:前面的字符或字符簇出現(xiàn)3次或更多次;
????????{3,5}
表示:前面的字符或字符簇出現(xiàn)至少3次伯铣,至多5次;
除了{}
呻此,還有其他的限定符,如:
*
:重復0次或多次腔寡,等價于:{0,}
+
:重復1次或多次焚鲜,等價于:{1,}
?
:重復0次或1次,等價于:{0,1}
|
:指明兩項之間的一個選擇放前,要匹配|
忿磅,請使用\|
Example:
^[0-9]{1,}$ // 匹配所有的正數(shù)
^[0-9]+$ // +與{1,}相等,表示前面的內(nèi)容可以是1個或多個
^\-{0,1}[0-9]{1,}$ // 匹配所有的整數(shù)
^\-?[0-9]+$
^\-{0,1}[0-9]{0,}\.{0,1}[0-9]{0,}$ // 匹配所有小數(shù)的正則
^\-?[0-9]{0,}\.?[0-9]{0,}$ // ?與{0,1}相等凭语,表示前面的內(nèi)容是可選的
^\-?[0-9]*\.?[0-9]*$ // *與{0,}相等葱她,表示前面的內(nèi)容可以是0個或多個
如果在限定符
*、+似扔、?吨些、{n}搓谆、{n,}、{n,m}
之后再添加一個字符?
豪墅,則表示盡可能少地重復字符?
之前的限定符的重復次數(shù)泉手,這種匹配方式稱為懶惰匹配。與之相對應的是貪婪匹配偶器,即僅僅使用單個限定符*螃诅、+、?状囱、{n}、{n,}倘是、{n,m}
的匹配亭枷。
.*?
?表示 盡可能少的 去匹配除換行符之外任意字符
.*
???表示 盡可能多的 去匹配除換行符之外任意字符
示例字符串:I love you so much! Do you know?
.*?you
會有2次匹配:I love you
和so much! Do you
.*you
??只會有1次匹配:I love you so much! Do you
- 元字符
4.1 匹配位置的元字符
??????^
?? 匹配行的開始位置
??????$
? 匹配行的結(jié)束位置
??????\b
匹配單詞的開始或結(jié)束位置
4.2 匹配字符的元字符
??????.
??匹配除換行符之外的任意字符
??????\d
匹配一個數(shù)字字符,等價于[0-9]
??????\D
匹配一個非數(shù)字字符搀崭,等價于[^0-9]
??????\w
匹配任何單詞字符(包括字母叨粘、數(shù)字、下劃線)瘤睹,等價于[a-zA-Z0-9_]
??????\W
匹配任何非單詞字符升敲,等價于[^a-zA-Z0-9_]
??????\s
匹配任何空白字符,包括空格轰传、換行符驴党、換頁符、回車符获茬、水平制表符港庄、垂直制表符,等價于[ \n\f\r\t\v]
??????\S
匹配任何非空白字符恕曲,即不包含空格鹏氧、換行符、換頁符佩谣、回車符把还、水平制表符、垂直制表符茸俭,等價于[^ \n\f\r\t\v]
??????\b
匹配一個單詞邊界吊履,也就是指單詞和空格間的位置。 例如:er\b可以匹配”never”中的”er”瓣履,但不能匹配”verb”中的”er"
??????\B
匹配非單詞邊界率翅。 例如:er\B
可以匹配”verb”中的”er”,但不能匹配”never”中的”er”
Example:
^.{3}$ 只能輸入長度為3的字符
^[a-zA-Z0-9]+$ 只能輸入由數(shù)字袖迎、字母組成的字符串
^\w+$ 只能輸入由數(shù)字冕臭、字母腺晾、下劃線三種單詞字符組成的字符串
(\w)\1 匹配兩個重疊出現(xiàn)的字符,其中\(zhòng)1表示對所獲取匹配的引用辜贵。例如: “aabbc11ads”悯蝉,匹配結(jié)果為三組”aa”、“bb”托慨、“11”的match鼻由。在第一次匹配過程中,\1就表示了對匹配字符a的引用厚棵,因此對連續(xù)出現(xiàn)的a匹配成功蕉世;若改為(\w)\1\1時,則可匹配連續(xù)出現(xiàn)三次的字符婆硬,如”aaabccc2sa”中的”aaa”和“ccc”狠轻。
- 正向與反向預查
"Swift1 Swift2 Swift3Swift4Swift4Swift4"
(Swift4)
匹配Swift4并獲取這一匹配,然后存儲供以后使用彬犯;
(Swift4)\1
匹配Swift4Swift4向楼,其中\1
即表示使用了存儲的匹配(存儲的第一個匹配),相當于匹配兩次Swift4谐区;
(Swift3)(Swift4)\2
匹配Swift3Swift4Swift4湖蜕,其中\2
即表示使用了存儲的第二個匹配,即Swift4(當然第一個匹配為:Swift3)宋列;
(?:Swift3)(Swift4)\1
匹配Swift3Swift4Swift4昭抒,與(Swift3)(Swift4)\2
相同;
由于在小括號中使用了?:
虚茶,所以第一個匹配(Swift3)沒有被存儲戈鲁,只存儲了后面的第二個匹配(Swift4);
若寫成(?:Swift3)(Swift4)\2
嘹叫,則正則表達式錯誤婆殿,因為沒有存儲第二個匹配;
其中?:
的作用是匹配Swift3模式字符串罩扇,但不會存儲該匹配婆芦。
Swift(?=4)
匹配右邊緊跟著4的Swift;
其中(?=)
稱為:正向預查匹配喂饥,(?=4)
表示先看看有沒有4消约,如果有,則把4左邊的Swift匹配出來员帮;如果沒有或粮,則繼續(xù)向右查看,這個過程就是正向預查匹配捞高。
(?=expression)
可理解為:匹配字符串expression前面的位置氯材。示例:
(?=.*[0-9])
整體的含義:后面必須要帶任意長度任意字符并有一位數(shù)字渣锦。
Swift(?!4)
匹配右邊不跟著4的Swift;
其中(?!)
稱為:正向預查不匹配氢哮,(?!4)
表示先看看有沒有4袋毙,如果沒有,也即不等于4的情況冗尤,則把左邊的Swift匹配出來听盖;如果有,則繼續(xù)向右查看裂七,這個過程就是正向預查不匹配皆看。
(?!expression)
可理解為:匹配后面不是字符串expression的位置。
(?<=4)Swift
匹配左邊緊跟著4的Swift背零,即第五個Swift單詞悬蔽,索引為26到30的字符;
其中(?<=)
稱為:反向預查匹配捉兴,(?<=4)
表示先看看有沒有4,如果有录语,則把4右邊的Swift匹配出來倍啥;如果沒有,則繼續(xù)向右查看澎埠,這個過程就是反向預查匹配虽缕。
(?<=expression)
可理解為:匹配字符串expression后面的位置。
(?<!4)Swift
匹配左邊不跟著4的Swift蒲稳,即第1氮趋、2、3江耀、4個Swift單詞剩胁;
其中(?<!)
稱為:反向預查不匹配,(?<!4)
表示先看看有沒有4祥国,如果沒有昵观,也即不等于4的情況,則把右邊的Swift匹配出來舌稀;如果有啊犬,則繼續(xù)向右查看,這個過程就是反向預查不匹配壁查。
(?<!expression)
可理解為:匹配前面不是字符串expression的位置觉至。
- 其他例子
例子1:強密碼 (必須包含數(shù)字、小寫字母和大寫字母三種字符睡腿,即這三種字符的組合语御,且不能使用特殊字符峻贮,長度在8-16之間)。
^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,16}$
例子2:強密碼 (必須包含數(shù)字和字母兩種字符沃暗,即數(shù)字和字母的組合月洛,且不能使用特殊字符,長度在8-16之間)孽锥。
^(?=.*[0-9])(?=.*[A-z])[0-9a-zA-Z]{8,16}$
強密碼 (必須包含數(shù)字和字母兩種字符嚼黔,即數(shù)字和字母的組合,且不限制是否使用特殊字符惜辑,長度在8-16之間)唬涧。
^(?=.*[0-9])(?=.*[A-z]).{8,16}$
例子3:強密碼 (必須包含數(shù)字、小寫字母盛撑、大寫字母和特殊字符四種字符碎节,即這四種字符的組合,其中特殊字符為除數(shù)字抵卫、小寫字母狮荔、大寫字母以外的其他字符,長度在8-16之間)介粘。
^(?:(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[^0-9a-zA-Z])).{8,16}$
例子4:匹配以兩個相同字母結(jié)尾的單詞殖氏,如:zoo、success姻采、all等雅采。
\b[a-zA-Z]*([a-zA-Z])\1\b
例子5:金額校驗,精確到2位小數(shù)慨亲。
^[0-9]+(.[0-9]{2})?$
例子6:金額校驗婚瓜,最多保留2位小數(shù),金額范圍:0.01-10000.00刑棵。
^((0\.\d?[1-9])|(0\.[1-9]0)|([1-9]\d{0,3}(\.\d{1,2})?)|(10000(\.0{1,2})?))$
正則表達式解釋:
(0\.\d?[1-9])
???????????????????????匹配:0.01~0.09 / 0.1~0.9 / 0.11~0.99
(0\.[1-9]0)
??????????????????????????匹配:0.10 / 0.20 / 0.30 / 0.40 / 0.50 / 0.60 / 0.70 / 0.80 / 0.90
([1-9]\d{0,3}(\.\d{1,2})?)
匹配:1.00~9999.99
(10000(\.0{1,2})?)
???????????????匹配:10000 或 10000.0 或 10000.00
例子7:正整數(shù)中剔除0巴刻、1、2蛉签、8冈涧、9、10
正蛙。
^(\d{3,})|(1[1-9])|([2-9]\d)|([34567]{1})$
正則表達式解釋:
(\d{3,})
????????匹配:3位及以上數(shù)字
(1[1-9])
????????匹配:以1開頭的2位數(shù)
([2-9]\d)
??????匹配:非1開頭的2位數(shù)
([34567]{1})
?匹配:除0督弓、1、2乒验、8愚隧、9之外的1位數(shù)