歡迎關(guān)注我的微博,一起學(xué)習(xí)進(jìn)步
寫(xiě)在前面
一直在用正則表達(dá)式沙兰,基本上都是匹配國(guó)內(nèi)手機(jī)號(hào)碼虑省、郵箱等,近期需要匹配其他國(guó)家電話(huà)僧凰、郵箱探颈,正好自己研究一下正則表達(dá)式。
正則表達(dá)式由原意字符和元字符構(gòu)成(原意字符表達(dá)字符原有意思训措,元字符則表達(dá)規(guī)定的特殊意義)
示例:^[0-9]+$
上面就是一個(gè)完整的正則表達(dá)式伪节,表示 一個(gè)只能由0到9(包含0和9)的數(shù)字 組成的至少一位的字符串,下面我們就來(lái)一起看一下正則表達(dá)式的基本用法光羞。
語(yǔ)法
正則語(yǔ)法中最基礎(chǔ)的表達(dá)式符號(hào)有以下四個(gè)
^ | $ | ** . ** | [ ] |
---|---|---|---|
指定字符串開(kāi)頭 | 指定字符串結(jié)尾 | 除 \r\n以外的 通配符 | 包含[]內(nèi)的任意一個(gè)字符(至少1個(gè)) |
(\r :回車(chē); \n:換行 )
^one
表示一個(gè)以“abc”開(kāi)始的字符串("one people","one dog")怀大;
類(lèi)似于-(BOOL) hasPrefix:(NSString *) astring;
-
dog$
:表示所以以”dog”結(jié)尾的字符串("a good dog"纱兑,"a bad dog");
類(lèi)似于:- (BOOL)hasSuffix:(NSString *) aString;
-
^iPhone&
表示有且只有這一個(gè)不重復(fù)的字段化借,
相當(dāng)于==
-
originalCharactor
單純的原意字符表示包含該字符串潜慎,
相當(dāng)于- (BOOL)containsString:(NSString *) aString,
- "." 也就是“點(diǎn)”,匹配任何單個(gè)字符(不包括回車(chē)換行)
1.a
1后面跟任意一個(gè)字符再跟一個(gè)a("1Qa","1@a","12a") -
[ab]
字符串中有一個(gè)a或b ("a","b") __ 注意區(qū)分 __^[ab]$
這是一個(gè)為"a"或"b"的字符串
[a-d]
:表示一個(gè)字符串包含小寫(xiě)的'a'到'd'中的一個(gè)蓖康;
^[a-zA-Z]
:表示一個(gè)以字母開(kāi)頭的字符串铐炫;
[0-9]a
:表示a前有一位的數(shù)字;
[a-zA-Z0-9]$
:表示一個(gè)字符串以一個(gè)字母或數(shù)字結(jié)束蒜焊。
{ } | * | + | ? |
---|---|---|---|
{}前一字符出現(xiàn)次數(shù)由{}內(nèi)數(shù)字決定 | *前一字符出現(xiàn) 0-N次 | +前一字符出現(xiàn)1-N次 | 倒信?前一字符出現(xiàn)0-1次 |
( )
域段:可與其他字符結(jié)合使用,表示()內(nèi)整個(gè)區(qū)域?yàn)橐粋€(gè)整體
{}
設(shè)置"{}"前一字符重復(fù)的具體范圍泳梆。例如:
“ab{4}”:字符串包含“一個(gè)a跟著4個(gè)b”(”abbbb”)鳖悠;
“ab{1,}”:字符串包含“一個(gè)a跟著至少1個(gè)b”(”ab”,”abb”,”abbb”,……);
“ab{2,5}”:表示一個(gè)字符串有一個(gè)a跟著2到5個(gè)b(”abb”,"abbb",”abbbb”,"abbbbb")优妙。
-
ab*
:字符串包含“一個(gè)a后面跟著0-N個(gè)b”("a", "ab", "abbb",……)乘综; -
ab+
:字符串包含“一個(gè)a后面跟著1-N個(gè)b”( "ab", "abbb",……); -
ab?
:字符串包含“一個(gè)a后面跟著0-1個(gè)b”( ”a”, “ab”)套硼; -
1(abc)*
:字符串包含“1后跟著0個(gè)或若干個(gè) abc ”("1","1abc","1abcabc",......);
可以看出卡辰,*
等價(jià)于{0,}
熟菲,+
等價(jià)于{1,}
朴恳,?
等價(jià)于{0抄罕,1}
注:{}
內(nèi)可以沒(méi)有上限,但是不能沒(méi)有下限于颖!例如“ab{,5}”是錯(cuò)誤的寫(xiě)法
等價(jià)
由上文可以看出呆贿,在正則表達(dá)式中有些東西是等價(jià)的,等價(jià)是正則表達(dá)式中的重要概念森渐,也是讓初學(xué)者一臉懵逼的存在做入,但如果將等價(jià)恢復(fù)成原有語(yǔ)法記憶就比較簡(jiǎn)單了。
?,*,+,\d,\w 都是等價(jià)字符
“ | ”表示“或”操作同衣,在[]
內(nèi)第一位使用用'^'表示匹配除[]
內(nèi)的其他字符
?等價(jià)于匹配長(zhǎng)度{0,1}
*等價(jià)于匹配長(zhǎng)度{0,}
+等價(jià)于匹配長(zhǎng)度{1,}
\d等價(jià)于[0-9]
\D等價(jià)于[^0-9] :匹配一個(gè)非數(shù)字字符("aabbcd","@#$abcd")
\w等價(jià)于[A-Za-z_0-9]
\W等價(jià)于[^A-Za-z_0-9] :匹配 非字母數(shù)字 的字符
常用正則表達(dá)式
- 匹配國(guó)內(nèi)手機(jī)號(hào) :
正則表達(dá)式^1[3,4,5,7,8][0-9]{9}$
(13/14/15/17/18開(kāi)頭竟块,11位)
iOS語(yǔ)法
-(BOOL) validatePhoneNum:(NSString *) phoneNum { NSString *phoneRegex = @"^1[3,4,5,7,8][0-9]{9}$"; NSPredicate *phonePre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex]; return [phonePre evaluateWithObject:phoneNum]; }
-
匹配郵箱:
正則表達(dá)式^[\w.%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$
iOS語(yǔ)法 參考手機(jī)號(hào) - 匹配QQ號(hào)碼:
^[1-9][0-9]{4,14}$
(5~15位,不能以0開(kāi)頭耐齐,只能是數(shù)字) - 匹配身份證:
(^[0-9]{15}$)|([0-9]{17}[0-9X]$)
(15位或18位身份證浪秘,18位身份證末位可能為X)