《正則表達式必知必會》讀書筆記

匹配單個字符串

  • 「 . 」來匹配任意單個字符
  • 須要找「 . 」自己使用「\.」,"\"爲特殊字符序列的開頭

匹配一組字符串

  • 匹配多個字符中的某一個javascript

    • 使用「 [ 」** 和 **「 ] 」 來定義一個字符集合java

  • 利用字符集和區間測試

    • [0-9] 和 [A-Z] 和 [A-Za-z0-9]this

  • 取非匹配命令行

    • [^0-9a-b] 注意:" ^ " 是做用於整個區間,而非緊跟後面的

使用元字符

  • 匹配空白字符code

    • \B —— 回退並刪除一個字符(BackSpace鍵)
    • \f —— 換頁符
    • \n —— 換行符
    • \r —— 回車符
    • \t —— tab符
    • \v —— 垂直tab符xml

  • 匹配數字ip

    • \b —— 任意一個數字字符(等價於[0-9])
    • \D —— 任意一個非數字字符(等價於[^0-9])字符串

  • 匹配字母和數字(與非字母和數字)it

    • \w —— 任意一個字母(大小寫均可),數字,下劃線(等價於[a-zA-Z0-9_])
    • \W —— 任意一個非字母,數字或非下劃線的字符(等價於[^a-zA-Z0-9_])

  • 匹配空白字符(於非空白字符)

    • \s —— 任意一個空白字符(等價於[\f\n\r\t\v])
    • \S —— 任意一個非空白字符(等價於[^\f\n\r\t\v])

  • 匹配十六進制貨八進制數值

  • 使用POSIX字符類 (javascript不支持)

重複匹配

  • 匹配一個或多個字符

    • 使用 「 + 」 表示同一個字符(或字符集合)的屢次重複, 至少須要匹配一個字符。
    • 字符集合中的元字符會被解析爲普通字符,例如:[\w.] 等價於 [\w.]

  • 匹配零個或多個字符

    • 使用 「 * 」 表示同一個或多個字符(或字符集合)的屢次重複。
    • 能夠把 「 * 」 理解爲 「在我前面的字符或字符集合是可選的」
    • 「 + 」「 * 」 區別是前者至少須要匹配一個字符,後者能夠不出現

  • 匹配零個或多個字符

    • 使用 「 ? 」 表示同一個字符(或字符集合)的零次或一次出現。

匹配的重複次數

  • 爲重複匹配的次數設定一個精確的值

    • 使用「 { 」「 } 」 來爲前面一個字符(或字符集合)重複匹配次數設定一個精確的值。
    • 例子: [3] [1] [2]
    • 正則: (\[\d\]){3}

  • 爲重複匹配次數設定一個區間

    • 使用「 { 」「 } 」 來爲前面一個字符(或字符集合)重複匹配次數設定一個區間的值。
    • 例子:
      • [3] [1] [2]
      • myArray[0]
    • 正則: (\[\d\]){1,3}

  • 匹配 「至少重複多少次」

    • 例子:
      • [3] [1] [2]
      • myArray[0]
    • 正則: (\[\d\]){1,}

  • 匹配 貪婪型元字符 和 懶惰型元字符
    • 貪婪型元字符 : 懶惰型元字符
      • : *?
      • : +?
    • {n,} : {n,}?

    • 例子:須要取得元素標籤
      • BK and cK
    • 正則: <[Bb]>.*?

位置匹配

  • 單詞邊界
    • 使用 ** \b ** 來匹配一個單詞的開始或結尾
      ** \b ** 匹配這樣的一個能構成單詞的字符(字母,數字和下劃線),等同於 ** \w **
    • 例子:
      The cat acattered his food all over the room
    • 正則:\bcat\b
    • 輸出:cat
      #
    • 使用 ** \B ** 表示不匹配一個單詞的邊界
      等同於 ** \W **

  • 字符串邊界
    • 使用 ** ^ ** 定義字符串的開頭
    • 例子:
      this is bad
    • 正則: ^\s*<\?xml.*\?> //對合法的空白自負作出妥善處理
      #
    • 使用 ** (?m) ** 開啓分行模式
      分行模式吧分隔符當作一個字符串分隔符來對待
      有許多正則表達不支持分行模式
    • 例子:
      //a
      //b
    • 正則: (?m)^\s*//.*$

子表達時

  • 使用 ** 「( 」 ** 和 ** 「 ) 」 ** 來表示子表達式
    • 例子:
      1983-03-13
    • 正則:(19|20)\d{2}
      #
  • 使用子表達式的嵌套,應該按照先內後外的原則進行

回朔引用:先後一致匹配

  • 使用 ** \數字 ** 表示表達式的後半部分引用在前半部分中定義的子表達式,能夠想象變成變量
    • 例子:
      of of and and
    • 正則:[ ]+(\w+)+[ ]+\1
  • 替換模式 P85 須要繼續瞭解

先後查找

  • 正向前查找 ** ?= **
  • 正向後查找 ** ?<= **
  • 負向前查找 ** ?! **
  • 負向後查找 ** ?<! **

javascript的正則 附錄

  • exec:匹配 RegEx
  • match:匹配 字符串
  • replace:替換 字符串
  • split:分拆
  • search:測試指定的字符串是否匹配字符串的方法
  • test: 測試指定的字符串是否匹配RegEx的方法

javascript 命令行注意點

  • g:激活全局搜索功能
  • i:匹配不分字母大小寫
  • m:多行字符串
  • s:單行字符串
  • x:忽略空表字符
  • $':將返回被匹配字符串前面的全部東西
  • $`:將返回被匹配字符串後面你的全部東西
  • $&:將返回被匹配到的全部東西
相關文章
相關標籤/搜索