摘要:[Regular Expression]語法筆記2-其他
Quantifiers
前一篇文章介紹的基本的Quantifiers
?: 出現一次或不出現 例如 a?+: 出現一次或一次以上, 例如 a+*: 出現任何次或不出現 例如 a*{n}: 重複n次{n,m}: 重複n到m次{n,}: 重複至少n次
還有其他的Quantifiers如下,都是以12foo123456foo這字串當作測試標的,以不同的Regex 來進行比對。在下列Example的截圖中,測試字串有藍色反白的就表示比對符合。
^ - 設定某字元(字串)必須是開頭
底下的Regex是設定文字須以foo開頭
-
Regex -
^foo -
比對結果 - 不符合

如果把^拿掉,就會發現比對成功了
- Regex -
foo - 比對結果 - 符合

$ - 設定某字元(字串)必須是結尾
底下的Regex是設定文字須以foo結尾
-
Regex -
foo$ -
比對結果 - 符合

?= - 設定被某字元(字串)接續在後
很難用文字解釋,舉例最快。底下的Regex是找出被foo接續在後的數字。所以會找到數字2跟數字6
-
Regex -
\d(?=foo) -
比對結果 - 2,6

?! - 設定不被某字元(字串)接續在後
很難用文字解釋,舉例最快。底下的Regex是找出不被foo接續在後的數字。所以會找到數字1跟數字1,2,3,4,5
-
Regex -
\d(?!foo) -
比對結果 - 數字1跟數字1,2,3,4,5

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

符合的是從頭到第二個foo的整個字串
如果把Regex換成.*?foo,取到的結果則是

符合的是從頭到第一個foo的字串
Modifiers
Modifiers是對整個Regex 進行設定,參數值要寫在建構式的斜線後面,例如:/foo/i
i - 忽略字母大小寫

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

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

有m Modifier

實戰演練
正整數
^\d*$
整數
^[+-]?\d*$
數字
^[+-]?\d*\.\d*$
電話號碼
[0-9]{2}\-[0-9]{7}
手機
[0-9]{4}\-[0-9]{3}\-[0-9]{3}