1. 程式人生 > >正則表達式學習

正則表達式學習

sla 必須 但是 有意義 回車符 之間 表示範圍 character aaa

學習git的時候正好需要這方面的知識,剛好自己也有些知識點有些模糊了,復習一遍。

正則表達式是什麽?

  • 正則表達式就是一個匹配的模式
  • 正則表達式本身就是一個字符串(有一些語法規則,特殊字符)

正則表達式概念簡介

主要分為 定界符, 原子, 元字符, 模式修正符

  • 定界符:顧名思義,就是模式表達式的界限,如 /aaa/,這個 //就是定界符。正則表達式寫在定界符中
  • 原子:要尋找的字符,在一個模式表達式中,至少有一個原子
  • 元字符:不能單獨使用,用於修飾原子,擴展原子功能和限制原子功能
  • 模式修正符:對模式進行修正用的,寫在定界符外面

定界符

在程序語言中,使用與Perl兼容的正則表達式,通常都要將模式表達式放入定界符中,如 //

. 除了字母、數字、 以外的任何字符都可以作為定界符

原子

原子指的是那些未被指定為 元字符 的打印字符和非打印字符組成,所有符號都為原子。

  • 打印字符:a-z A-Z 0-9 _ !@#$%^&*()_+ 等
  • 非打印字符:
    • \n 匹配一個換行符
    • \cx 匹配由x指明的控制字符 x的值為A-Z 或者a-z之一
    • \f 匹配一個換頁符
    • \r 匹配一個回車符
    • \t 匹配一個制表符
    • \v 匹配一個垂直制表符
  • \ 可以將有意義的字符轉為無意義的,也可以將無意義的轉為有意義的,如上述的 非打印字符
  • 可以使用系統提供的代表範圍的原子
    • \d:代表任意一個數字 [0-9]
    • \D:代表任意一個非數字 [^0-9]
    • \s:代表一個空白 [\n\r\t\f ]
    • \S:代表一個非空白 [^\n\r\t\f ]
    • \w:代表任意一個字(a-z A-Z 0-9 _) [a-zA-Z0-9_]
    • \W:代表任意一個非字 [^a-zA-Z0-9_]
  • 自定義原子表 [],只有一個生效就可以。 以上可以用自定義原子表來代替 如 \d為[0-9]等
    • -:表示範圍
    • ^:表示除了
  • . 能代表所有的

元字符

  • *: 前面的原子可以出現0次,1次或者多次 {0,}
  • +: 前面的原子可以出現1次或者多次 {1,}
  • ?: 前面的原子可以出現0次或者一次 {0,1}
  • {n}: 前面的原子必須出現n次
  • {n,m}: 出現n到m之間的次數 包括n和m
  • {2,}: 出現至少兩次
  • {,5}: 不可以這樣寫,可以以0開始
  • |: 或的關系,表示它兩邊的原子只要有一個出現就行,但是|的優先級是最低的
  • ^\A: 必須以什麽開始,這個必須寫在正則表達式的最前面
  • $\Z: 必須以什麽結束,這個必須寫在正則表達式的最後面
  • \b: 匹配單詞邊界的

    如 this is island 用 /\bis\b/可以匹配中間的那個is
  • \B: 匹配單詞邊界以外的的
  • ()的作用
    • 改變優先級
    • 將小原子變成大原子,如 (aaa)*
    • 子模式,整個表達式是一個大的模式,小括號中是每個獨立的子模式,能獲取全模式和所有的子模式
    • 反向引用,即將子模式用在正在表達式中。

模式修正符

  • 模式修正符號要寫在定界符號外,放在右邊
  • 模式修正符號,一個字符就是一個功能,可以組合使用
  • 作用:模式修正符號可以修正正則表達式的解釋,或擴充了正則表達式的功能
  • 用法

    • i 不區分大小寫(默認是區分大小寫的)
    • m 默認是看做一行的,加上m就視為多行
    • s 使用了這個.可以匹配換行符
    • x 修正正則表達式,可以省略空白
    • e 修正正則表達式 preg_replace
    • U
      • (.*,.+)正則表達式比較貪婪
      • (.*?) (.+?)取消貪婪模式
      • U也能但是不兼容
      • 這兩種方式同時使用就不會奏效了

正則表達式學習