[Regular Expression]語法筆記2-其他

  • 3712
  • 0
  • 2016-03-05

摘要:[Regular Expression]語法筆記2-其他

Quantifiers

前一篇文章介紹的基本的Quantifiers

  • ?: 出現一次或不出現 例如 a?
  • +: 出現一次或一次以上, 例如 a+
  • *: 出現任何次或不出現 例如 a*
  • {n}: 重複n次
  • {n,m}: 重複n到m次
  • {n,}: 重複至少n次

還有其他的Quantifiers如下,都是以12foo123456foo這字串當作測試標的,以不同的Regex 來進行比對。在下列Example的截圖中,測試字串有藍色反白的就表示比對符合。

^ - 設定某字元(字串)必須是開頭

底下的Regex是設定文字須以foo開頭

  • Regex - ^foo

  • 比對結果 - 不符合

jp01

如果把^拿掉,就會發現比對成功了

  • Regex - foo
  • 比對結果 - 符合

jp02

$ - 設定某字元(字串)必須是結尾

底下的Regex是設定文字須以foo結尾

  • Regex - foo$

  • 比對結果 - 符合

jp03

?= - 設定被某字元(字串)接續在後

很難用文字解釋,舉例最快。底下的Regex是找出被foo接續在後的數字。所以會找到數字2跟數字6

  • Regex - \d(?=foo)

  • 比對結果 - 2,6

jp04

?! - 設定被某字元(字串)接續在後

很難用文字解釋,舉例最快。底下的Regex是找出foo接續在後的數字。所以會找到數字1跟數字1,2,3,4,5

  • Regex - \d(?!foo)

  • 比對結果 - 數字1跟數字1,2,3,4,5

jp05

**?的不同

直接以範例說明,使用這個Regex - .*foo,這是要取得接在foo之前的非空白文字。而我們的測試目標字串有兩個foo -> 12foo123456foo。那麼取到的字串會是甚麼呢?

jp06

符合的是從頭到第二個foo的整個字串

如果把Regex換成.*?foo,取到的結果則是

jp07

符合的是從頭到第一個foo的字串

Modifiers

Modifiers是對整個Regex 進行設定,參數值要寫在建構式的斜線後面,例如:/foo/i

i - 忽略字母大小寫

jp08

g - 把全部符合的都找出來,而非只找到第一個

jpg09

m - 進行多行比對

在比對的字串有多行(\n\r)的情況下時,Regex設定開始^或結束$其實是尋找整個字串的開始及結束。如果想要找到每一行的開始與結束,則加入m Modifier

沒有m Modifier

jp10

m Modifier

jp11

實戰演練

正整數

^\d*$

整數

^[+-]?\d*$

數字

^[+-]?\d*\.\d*$

電話號碼

[0-9]{2}\-[0-9]{7}

手機

[0-9]{4}\-[0-9]{3}\-[0-9]{3}

參考: