摘要:[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 -> 12foo
123456foo
。那麼取到的字串會是甚麼呢?
符合的是從頭到第二個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}