天天看點

正規表達式--文法

構造正規表達式的方法和建立數學表達式的方法一樣。也就是用多種元字元與運算符可以将小的表達式結合在一起來建立更大的表達式。

正規表達式的元件可以是單個的字元、字元集合、字元範圍、字元間的選擇或者所有這些元件的任意組合。

正則達式有集中分類:

一、普通字元

1.[ABC]比對[...]中的所有字元

2.[^ABC]比對除了...中字元所有的字元

小結:在大括号中用^表示非,用在表達式最前面表示字元串的開始,這裡有坑!!!

3.[A-Z]比對所有大寫字母

  [a-z]比對所有小寫字母

4.\n   \r  換行

5.\s 比對所有空白符,包括換行

   \S 比對所有非空白符,不包括換行

6.\w 比對字母、數字、下劃線。等價于 [A-Za-z0-9_]

二、非列印字元

這裡的我們不太常用,用到了再來查吧!

三、特殊字元

許多元字元要求在試圖比對它們時特别對待。若要比對這些特殊字元,必須首先使字元"轉義",即,将反斜杠字元\ 放在它們前面。

舉例:+表示比對一個或者多個,至少一個,如果要查找的字元串中的+号,則需要對+進行轉義,變成\+

四、限定符

1.+表示比對一個或者多個,至少一個,等價于{1,}

        [0-9]比對單個數字

        [0-9]+比對多個數字

2.*表示比對一個或者多個,可以沒有,等價于{0,}

3.?表示比對最多一個,等價于{0,1}

小結:* 和 + 限定符都是貪婪的,因為它們會盡可能多的比對文字,隻有在它們的後面加上一個 ? 就可以實作非貪婪或最小比對。

通過在 *、+ 或 ? 限定符之後放置 ?,該表達式從"貪婪"表達式轉換為"非貪婪"表達式或者最小比對。

4.{n}n 是一個非負整數。比對确定的 n 次。

5.{n,}n 是一個非負整數。至少比對n 次。

6.{n,m}m 和 n 均為非負整數,其中n <= m。最少比對 n 次且最多比對 m 次。

小結:上面描述了花括号的三種不同的用法。一個數字 {x} 的意思是前面的字元隻出現x次 ;一個數字加逗号 {x,} 的意思是前面的内容出現x或更多的次數 ;兩個數字用逗号分隔的數字 {x,y} 表示 前面的内容至少出現x次,但不超過y次。

五、定位符

1.^比對輸入字元串的開始位置

2.$比對輸入字元串的結束位置

如果一個模式不包括^和$,那麼它與任何包含該模式的字元串比對

注意:此處有坑!!!

舉例:比對1~60的數字

如果我們加了開始和結束/^([1-9]|[1-5][0-9]|60)$,那麼,會正常比對(1~60之内的數字能找到比對;1~60之外的數字沒有比對)

正規表達式--文法
正規表達式--文法

但是,如果我們沒有加開始或者結束,他可就不是我們想要的樣子了喲!

正規表達式--文法

3.\b 描述單詞的前或後邊界

4.\B 表示非單詞邊界

六、選擇

用圓括号 () 将所有選擇項括起來,相鄰的選擇項之間用 | 分隔。

但用圓括号會有一個副作用,使相關的比對會被緩存,此時可用 ?: 放在第一個選項前來消除這種副作用。

其中 ?: 是非捕獲元之一,還有兩個非捕獲元是 ?= 和 ?!,這兩個還有更多的含義,前者為正向預查,在任何開始比對圓括号内的正規表達式模式的位置來比對搜尋字元串,後者為負向預查,在任何開始不比對該正規表達式模式的位置來比對搜尋字元串。

 ?=、?<=、?!、?<! 的使用差別:

exp1(?=exp2):查找 exp2 前面的 exp1。

(?<=exp2)exp1:查找 exp2 後面的 exp1。

exp1(?!exp2):查找後面不是 exp2 的 exp1。

(?<!exp2)exp1:查找前面不是 exp2 的 exp1。

這裡挺有意思,值得研究一下,小編暫時還是懵的,有研究過的小夥伴滴滴呀!

七、反向引用

這裡講的也是上面的?:、?= 或 ?!,主要用來提供查找文本中兩個相同的相鄰的單詞比對能力

學了這麼多了,改上手試試了(底下附答案,不要提前偷看哦!):

1.38~156   

2.數字字母和&組合,最短8位,最長32位的字元

3."Is is the cost of of gasoline going up up"經過\b([a-z]+) \1\b是什麼?如果/\b([a-z]+) \1\b/ig結果是什麼?

1.^(3[8-9]|[4-9]\d|1[0-4]\d|15[0-6])$

解析:^開始  $結束

3[8-9]:38~39

[4-9]\d: 相當于[4-9][0-9]  40~99

1[0-4]\d: 相當于1[0-4][0-9]  100~149

15[0-6]:150~156

整合到一起就是38~156

2.^[a-zA-Z0-9\&]{8,32}$

解析:

[A-Z]:比對所有大寫字母

[a-z]:比對所有小寫字母

[0-9]:比對一個數字字元。等價于\d。

\&:特殊字元&比對加\轉義

{8,32}字元長度為8~32

3.of of,up up      Is is,of of,up up

\b  \b :單詞的前後邊界

[a-z]+: a-z的至少一個字母

\1:這個這個這個不是很了解

(網上查到的:配合()使用,如果()後出現\1表示第一個小括号中要比對的内容,\2表示第二個,\0表示整個表達式)

i:不區分大小寫

g:全局比對

啊哦,小編在學正規表達式的時候遇到了幾個問題,已經貼心的标成了藍色字型,懂的小可愛歡迎指教哦!

繼續閱讀