1、貪婪模式:根據匹配字串以及表示式盡可能多的進行匹配,成為貪婪匹配模式
例如:/a\d+/ 即可以匹配首字母為a的之後的許多數字,這個不進行限制
或者另外一種方法/a\d/也可以實現同樣的方法
2、非貪婪模式:根據匹配字串以及表示式盡可能少的進行匹配。使用的方法就是在修飾匹配次數的特殊符號後再加上乙個?號進行限制 如"*?","+?","?","?"
如:/a\d+?/即匹配的字串為a為首字母,後面只能有乙個數字
3、複雜模式 分為分組,反向引用,候選,非捕獲性分組,前瞻,邊界定位符和多行模式等
1)、分組,引入()的概念,其語法是(pattern),即將「pattern」部分組合成乙個可以統一操作的組合項或子匹配,也就是說用括號括起一些字元,字元類或者量詞等,每個捕獲的字匹配項按照其出現的順序儲存在緩衝區中。 如:/(abc)/如過匹配的字串是wcabcabcabc的話則可以匹配到的字串是abcabcabc
2)、反向引用分組得到的子匹配,正規表示式後面的部分,可以引用前面分組的子匹配中已經匹配到的字串,這稱之為反向引用 語法是\num,即可以引用編號為num的內容 其值是1-99的整數 如:/(\w)\2/ 其中\2表示子匹配 如果/\w/可以匹配目標字串中連續出現的幾個字元,則可以是用/\w\1/來匹配。正規表示式/<(\w+)\s*(\w+(=('|").*?\4)?\s*)*>.*?/就可以匹配 這裡的\1就是匹配的第乙個括弧中\w+的內容。
3)、候選:即用「|」來表示匹配的表示式之間的或關係,語法是表示式|表示式,兩個表示式是或的關係。如匹配座機號碼 有3位區號8位號碼和4位區號7位號碼這兩類,在寫正規表示式的時候就可以寫/(((\d\)|\d-)\d)|(((\d\)|\d-)\d)$/即表達了兩類方式如023-47854***或者023/47854*** 或者0234/******x 0234-******x
4)、非捕獲性分組:其語法是(?:pattern),將pattern部分組合成為乙個可以統一進行操作的組合項,但是不把這部分內容當做子匹配捕獲,這種方法必須在進行組合,但是又不想對組合的部分進行快取的情況下使用。如找倆單詞:programe和project 前面的pro都相同,則可以寫成/programe|project/或者是/pro(gram|ject)/,如果進行非捕獲性匹配的話就要寫成/pro(?:gram|ject)/
5)、正向前瞻:語法是(?=pattern) 在目標字串的響應位置必須要有pattern部分匹配的內容,但是不作為匹配結果處理,不會放在緩衝區中。/windows(?=xp|7)/,只能匹配windows xp和windows7,不能匹配其他的內容 xp和7不作為結果返回。
6)、負向前瞻:語法是(?!pattern) 在被搜尋的字串的相應位置不能有pattern部分表示的內容,不能將其作為結果進行處理,也不會存在緩衝區中。 如/bed(?!room)/可以匹配bed後不是room的所有字串
7)、邊界定位符:^ 與字串開始的地方匹配,不匹配任何字元 但是如果是放在[^a-z]的時候就表示匹配除了a-z以外的字串。$表示與字串結束的地方匹配,也是不匹配任何的字元。\b 匹配乙個單詞的邊界,也就是單詞和空格之間的位置,不匹配任何字元 \b是\b的「非」,即是匹配乙個非單詞邊界。
正規表示式摘要
一些特殊符號在表示式中代表抽象的特殊意義 表示式作用 與字串開始的地方匹配,不匹配任何字元 與字串結束的地方匹配,不匹配任何字元 b 匹配乙個單詞邊界,也就是單詞和空格之間的位置,不匹配任何字元 舉 例1 表示式 aaa 在匹配 aaa 時,匹配結果是 失敗。因為 要求與字串開始的地方匹配,因此,只...
摘要 正規表示式
正規表示式 regular expression 描述了一種字串匹配的模式 pattern 可以用來檢查乙個串是否含有某種子串 將匹配的子串替換或者從某個串中取出符合某個條件的子串等。除換行符以外的所有字元。字串開頭。字串結尾。d,w,s 匹配數字 字元 空格。d,w,s 匹配非數字 非字元 非空格...
正規表示式 正規表示式 總結
非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...