Regex 正則表達式中幾個符號([ ] ^ {} ?: ?= ?!)的概念

  1. 方括號[ ]只能匹配一個字符,稱為:字符類 或 字符簇印荔。
    其中連字號-[ ]中使用時表示一個字符的范圍低葫。

Example:

[a-z]      // 匹配所有的小寫字母

[A-Z]      // 匹配所有的大寫字母

[a-zA-Z]   // 匹配所有的字母

[A-z]      // 匹配所有的字母,同[a-zA-Z]

[0-9]      // 匹配所有的數(shù)字

[0-9\.\-]      // 匹配所有的數(shù)字仍律、句號嘿悬、減號

[ \n\f\r\t\v]  // 匹配所有的空白字符(空格、換行符水泉、換頁符善涨、回車符、水平制表符茶行、垂直制表符)
  1. ^除了表示字符串的開頭躯概,還有另外一個含義,即當在一組方括號里使用^時畔师,它表示”非”或”排除”的意思娶靡,常常用來剔除某個字符。

Example:

[^a-z]       // 匹配除了小寫字母以外的所有字符

[^\\\/\^]    // 匹配除了\ / ^之外的所有字符

[^\”\’]      // 匹配除了雙引號和單引號之外的所有字符
  1. 限定符
    花括號{}跟在字符或字符簇后面看锉,用來確定前面的內(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 youso much! Do you
.*you ??只會有1次匹配:I love you so much! Do you

  1. 元字符
    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”狠轻。
  1. 正向與反向預查
"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. 其他例子

例子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ù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子狂塘,更是在濱河造成了極大的恐慌录煤,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荞胡,死亡現(xiàn)場離奇詭異妈踊,居然都是意外死亡,警方通過查閱死者的電腦和手機泪漂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門廊营,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人萝勤,你說我怎么就攤上這事露筒。” “怎么了敌卓?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵慎式,是天一觀的道長。 經(jīng)常有香客問我趟径,道長瘪吏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任蜗巧,我火速辦了婚禮肪虎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惧蛹。我一直安慰自己,他們只是感情好刑枝,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布香嗓。 她就那樣靜靜地躺著,像睡著了一般装畅。 火紅的嫁衣襯著肌膚如雪靠娱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天掠兄,我揣著相機與錄音像云,去河邊找鬼。 笑死蚂夕,一個胖子當著我的面吹牛迅诬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播婿牍,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼侈贷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了等脂?” 一聲冷哼從身側(cè)響起俏蛮,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤撑蚌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后搏屑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體争涌,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年辣恋,在試婚紗的時候發(fā)現(xiàn)自己被綠了亮垫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡抑党,死狀恐怖包警,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情底靠,我是刑警寧澤害晦,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站暑中,受9級特大地震影響壹瘟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鳄逾,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一稻轨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧雕凹,春花似錦殴俱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至汽摹,卻和暖如春李丰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背逼泣。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工趴泌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拉庶。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓嗜憔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親氏仗。 傳聞我的和親對象是個殘疾皇子痹筛,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353