前言:
正則表達(dá)式通常用于兩種任務(wù):1.驗(yàn)證,2.搜索/替換洋丐。用于驗(yàn)證時(shí),通常需要在前后分別加上 ^ 和 迁客。此表所列的常用正則表達(dá)式郭宝,除個(gè)別外均未在前后加上任何限定,請(qǐng)根據(jù)需要掷漱,自行處理粘室。
1.正則表達(dá)式:是指一個(gè)用來(lái)描述或者匹配一系列符合某個(gè)句法規(guī)則的字符串的單個(gè)字符串,簡(jiǎn)單說(shuō)卜范,就是我們寫(xiě)個(gè)模板衔统,然后去匹配字符串。
下面我們來(lái)看看一些基本的正則表達(dá)式的語(yǔ)法:
語(yǔ)法 | 釋義 |
---|---|
\ | 將下個(gè)字符標(biāo)記為一個(gè)特殊的字符先朦、一個(gè)原義字符缰冤、一個(gè)向后引用或者一個(gè)八進(jìn)制轉(zhuǎn)義符例如“\n”就是匹配一個(gè)換行符 |
^ | 匹配開(kāi)始位置, ^(a)這個(gè)就匹配開(kāi)頭必須為a |
$ | 匹配結(jié)束位置喳魏,$(a)這個(gè)就匹配結(jié)尾必須為a |
* | 匹配前面的子表達(dá)式零次或者多次棉浸,如“xu*”這個(gè)表達(dá)式就能夠匹配“x”和“xuu” |
+ | 匹配前面的子表達(dá)式一次或者多次,如“xu+”這個(gè)表達(dá)式就能夠匹配“xuu”和“xu”刺彩,但不能夠匹配“x”迷郑,這個(gè)就是和“*”的區(qū)別 |
? | 匹配前面的子表達(dá)式零次或者一次,如“xu创倔?”這個(gè)表達(dá)式就能夠匹配“jian(guo)?”就可以匹配“jian”和“jianguo” |
{n} | n是一個(gè)非負(fù)數(shù)嗡害,匹配n次,如“guo{2}”畦攘,可以匹配“guoo”霸妹,不能匹配“guo” |
{n,} | n是一個(gè)非負(fù)數(shù),匹配至少n次 |
{n, m} | m知押、n都是非負(fù)數(shù)叹螟,最少匹配n次,最多匹配m次 |
(pattern) | 匹配pattern并獲取匹配結(jié)果 |
(?:pattern) | 匹配pattern但不獲取匹配結(jié)果 |
[xyz] | 字符集合台盯,匹配所包含的任意字符罢绽。如“[abc]”可以匹配“apple”中的“a” |
[^xyz] | 匹配未被包含的字符 |
[a-z] | 字符范圍,匹配指定范圍內(nèi)的任意字符 |
[^a-z] | 匹配指定不在范圍內(nèi)的任意字符 |
\b | 匹配一個(gè)單詞的邊界静盅,如“guo\b”可以匹配“xujianguo”中的“guo” |
\B | 匹配非單詞邊界良价,如“jian\B”可以匹配“xujianguo”中的“jian” |
\d | 匹配一個(gè)數(shù)字字符,等價(jià)于“[0-9]” |
\D | 匹配一個(gè)非數(shù)字字符 |
\f | 匹配一個(gè)換頁(yè)符 |
\n | 匹配一個(gè)換行符 |
\r | 匹配一個(gè)回車符 |
\s | 匹配任何空白字符 |
x|y : 匹配x或y蒿叠,如“(xu|jian)guo”匹配“xuguo”或者“jianguo”
2.常用正則表達(dá)式
- 網(wǎng)址(URL) :
[a-zA-z]+://[^\s]*
- IP地址(IP Address) :
((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
- 電子郵件(Email) :
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
QQ號(hào)碼 |[1-9]\d{4,}
- HTML標(biāo)記(包含內(nèi)容或自閉合) :
<(.*)(.*)>.*<\/\1>|<(.*) \/>
- 密碼(由數(shù)字/大寫(xiě)字母/小寫(xiě)字母/標(biāo)點(diǎn)符號(hào)組成明垢,四種都必有,8位以上) :
(?=^.{8,}$)(?=.*\d)(?=.*\W+)(?=.*[A-Z])(?=.*[a-z])(?!.*\n).*$
- 日期(年-月-日) :
(\d{4}|\d{2})-((1[0-2])|(0?[1-9]))-(([12][0-9])|(3[01])|(0?[1-9]))
- 日期(月/日/年) :
((1[0-2])|(0?[1-9]))/(([12][0-9])|(3[01])|(0?[1-9]))/(\d{4}|\d{2})
- 時(shí)間(小時(shí):分鐘, 24小時(shí)制) :
((1|0?)[0-9]|2[0-3]):([0-5][0-9])
- 漢字(字符) :
[\u4e00-\u9fa5]
- 中文及全角標(biāo)點(diǎn)符號(hào)(字符) :
[\u3000-\u301e\ufe10-\ufe19\ufe30-\ufe44\ufe50-\ufe6b\uff01-\uffee]
- 中國(guó)大陸固定電話號(hào)碼 :
(\d{4}-|\d{3}-)?(\d{8}|\d{7})
- 中國(guó)大陸手機(jī)號(hào)碼 :
1\d{10}
- 中國(guó)大陸郵政編碼 :
[1-9]\d{5}
- 中國(guó)大陸身份證號(hào)(15位或18位) :
\d{15}(\d\d[0-9xX])?
- 非負(fù)整數(shù)(正整數(shù)或零) :
\d+
- 正整數(shù) :
[0-9]*[1-9][0-9]*
- 負(fù)整數(shù) :
-[0-9]*[1-9][0-9]*
- 整數(shù) :
-?\d+
- 小數(shù) :
(-?\d+)(\.\d+)?
- 不包含abc的單詞 :
\b((?!abc)\w)+\b
3.日常OC正則表達(dá)式
- 匹配9-15個(gè)由字母/數(shù)字組成的字符串的正則表達(dá)式:
NSString * regex = @"^[A-Za-z0-9]{9,15}$";
NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
BOOL isMatch = [pred evaluateWithObject:txtfldPhoneNumber.text];
- 匹配由中文栈虚、字母或數(shù)字組成
NSString *regex = @"[a-zA-Z\u4e00-\u9fa5][a-zA-Z0-9\u4e00-\u9fa5]+";
NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
- 匹配中文袖外、英文、數(shù)字魂务、_曼验、-泌射、.及()且長(zhǎng)度1到30
NSString *regex = @"(?=^.{1,30}$)(?:[\u4e00-\u9fa5A-Za-z0-9_.()()\-]+)";
NSPredicate *pre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
BOOL ismatch = [pre evaluateWithObject:text];