寫一個正則表達式,要求匹配字符串同時滿足條件A和條件B
我們可以先寫兩個子表達式PatternA和PatternB,分別校驗條件A和條件B。然后結(jié)合成一個新的表達式
(?=PatternA)PatternB
例如,當在Windows Server上修改用戶密碼時,一般要求滿足以下要求:
1. 6到256個字符
2. 包括以下四類字符中的至少三類: 數(shù)字/小寫字母/大寫字母/其他字符
3. 其它無法用正則表達式校驗的規(guī)則(例如最短密碼修改時間)
我們就可以用以下正則表達式來校驗密碼的合法性(其中藍色和綠色部分分別為PatternA和PatternB):
(?=^.{6,255}$)((?=.*\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))^.*
•寫一個正則表達式,要求匹配字符串滿足條件A,但不可滿足條件B
我們可以先寫兩個子表達式PatternA和PatternB,分別校驗條件A和條件B。然后結(jié)合成一個新的表達式
(?!PatternB)PatternA
例如,Windows Server的機器名一般要求滿足以下要求(比微軟官方要求有所簡化):
1. 2到15個字符。只能包括: 數(shù)字/小寫字母/大寫字母/減號
2. 不能全部為數(shù)字
我們就可以用以下正則表達式來校驗機器名的合法性(其中藍色部分分別為PatternB,綠色部分為PatternA):
^(?!^\d*$)([a-zA-Z0-9-]{2,15})$
•寫一個正則表達式,要求匹配字符串或者滿足條件A或者滿足條件B
我們可以先寫兩個子表達式PatternA和PatternB,分別校驗條件A和條件B。然后結(jié)合成一個新的表達式
(PatternA|PatternB)
例如在非必須填的電話號碼域中,用戶可以輸入一個合法的電話號碼,也可以留空
我們就可以用以下正則表達式來校驗機器名的合法性(其中藍色部分分別為PatternB,綠色部分為PatternA):
(^$|\d{7,16})
注意:行起始符(^),行終止符($)和非貪婪標志(?)在這里的使用非常重要。
您可能感興趣的文章:- PHP 正則表達式效率 貪婪、非貪婪與回溯分析(推薦)
- php正則表達式中貪婪與非貪婪介紹
- PHP正則表達式之捕獲組與非捕獲組
- PHP之正則表達式捕獲組與非捕獲組(詳解)
- 正則表達式之 貪婪與非貪婪模式詳解(概述)
- 小議正則表達式效率 貪婪、非貪婪與回溯
- [正則表達式]貪婪模式與非貪婪模式