OC 正則表達(dá)式詳解

前言:

正則表達(dá)式通常用于兩種任務(wù):1.驗(yàn)證,2.搜索/替換洋丐。用于驗(yàn)證時(shí),通常需要在前后分別加上 ^ 和 挥等,以匹配整個(gè)待驗(yàn)證字符串友绝;搜索/替換時(shí)是否加上此限定則根據(jù)搜索的要求而定,此外肝劲,也有可能要在前后加上\b而不是^和迁客。此表所列的常用正則表達(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];

詳解

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鬓照,隨后出現(xiàn)的幾起案子熔酷,更是在濱河造成了極大的恐慌,老刑警劉巖豺裆,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拒秘,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡臭猜,警方通過(guò)查閱死者的電腦和手機(jī)躺酒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蔑歌,“玉大人羹应,你說(shuō)我怎么就攤上這事〈瓮溃” “怎么了园匹?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)劫灶。 經(jīng)常有香客問(wèn)我裸违,道長(zhǎng),這世上最難降的妖魔是什么本昏? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任供汛,我火速辦了婚禮,結(jié)果婚禮上涌穆,老公的妹妹穿的比我還像新娘紊馏。我一直安慰自己,他們只是感情好蒲犬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著岸啡,像睡著了一般原叮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上巡蘸,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天奋隶,我揣著相機(jī)與錄音,去河邊找鬼悦荒。 笑死唯欣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的搬味。 我是一名探鬼主播境氢,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蟀拷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了萍聊?” 一聲冷哼從身側(cè)響起问芬,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寿桨,沒(méi)想到半個(gè)月后此衅,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡亭螟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年挡鞍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片预烙。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡墨微,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出默伍,到底是詐尸還是另有隱情欢嘿,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布也糊,位于F島的核電站炼蹦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏狸剃。R本人自食惡果不足惜掐隐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钞馁。 院中可真熱鬧虑省,春花似錦、人聲如沸僧凰。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)训措。三九已至伪节,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绩鸣,已是汗流浹背怀大。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留呀闻,地道東北人化借。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像捡多,于是被迫代替她去往敵國(guó)和親蓖康。 傳聞我的和親對(duì)象是個(gè)殘疾皇子铐炫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353