正規表示式 - Regular Expression
正規表示式 (Regular Expression)
能為你檢查是否為全英文字串! 很專業!
正規表示式 (Regular Expression)
能為你檢查是否為指定結構字串! 很貼心!
正規表示式 (Regular Expression)
能為你找出複雜性組成字串! 很厲害!
What is it?
Regular Expression
又稱正規表達式
、正規表示法
、規則運算式
、常規表示法
。是一門電腦科學,是用來比對字串是不是有符合正確的格式。
語法簡單,功能強大,最重要的是!幾乎已知的語言都有支援他。包誇了各大編譯器皆有支援。
開始之前
讓我們擁有一個實用的線上工具 regex101。
您可以在 TEST STRING 的地方輸入 focus
,在於 REGULAR EXPRESS 的地方輸入 focus
或其中一字元都行(注意大小寫)。是否被選起來了呢!
下面的教學皆可直接扔進線上工具內使用哦!
- 注意: 正規表示法使用時前後須由
/
包起來(/a/
),但該工具 REGULAR EXPRESS 中輸入時不用。
語法
字元
1 | a: a字元 |
RegExp | 說明 | 範例 |
---|---|---|
/a/ | 含有字元 a | a , ab , ba , bbacc |
/./ | 任意單一字元 | a , ab , ba , bbccc , 哈囉 |
/a./ | 含有字元 a 且後面接任意單一字元 | a1 , ab , a囉 |
次數
1 | *: 比對前一個字串 0 次或是多次。 |
RegExp | 說明 | 範例 |
---|---|---|
/ba*c/ | bc 字元中間,a 字元出現 0 次或是多次。 | bc , bac , baaac |
/ba?c/ | bc 字元中間,a 字元出現 0 次或一次。 | bc , bac |
/ba+c/ | bc 字元中間,a 字元出現 0 次或一次。 | bac , baaac |
/ba{2}c/ | bc 字元中間,a 字元出現 2 次。 | baac |
/ba{2,}c/ | bc 字元中間,a 字元出現 2 次以上。 | baac , baaac |
/ba{2,5}c/ | bc 字元中間,a 字元出現 2 - 5 次。 | baac , baaaaac |
條件
1 | ^: 字串開頭。 |
RegExp | 說明 | 範例 |
---|---|---|
/^ab/ | ab 開頭字串。 | ab , abc |
/ab$/ | ab 結尾字串。 | ab , cab |
/acc | bcc/ | acc 字串或 bcc 字串。 |
/a\*/ | a*字串。 | a* , aa* , a*a |
多字元篩選
1 | [ ] : [] 內所包含字元。 |
RegExp | 說明 | 範例 |
---|---|---|
/[abc]/ | abc 任一字串。 | abc , ade , bde , cde |
/[^abc]/ | 非 abc 任一字串。 | def , ggg , ddd |
/[0-9]/ | 數字 0 - 9 | 0123456789 , a0b , 9a8n |
在
[ ]
後面接上{n}
,則會取得[]
中指定數量組合(不分順序)。1
EX: [abc]{2} : `ab` , `cb` , 'ac'
特殊字元
1 | \d: 任何數字字元,等同 [0-9] |
實例
1 | 西元生日: 四個數字開頭 - 兩個數字 - 兩個數字結尾 |
同場加映
Regex matching line not containing the string
不包含指定的字元!
1 | RegExp: ^((?!YoYo).)*$ |
- Hello YoYo!
- Hello Hank!
保留差異字元取代
- 筆者覺得這個超重要,大家一定要會。
在正規表示式
中被 ()
所選起來的參數可以被保留至變數中。
保留變數會由 $1 $2 $3 所使用。
1 | # 一段句子中,若只替換問候語而保留人名。 |
什麼? 你問我這有什麼用?
筆者遇到的問題是,因為語言版本的關係。要將程式內的變數使用 {}
替換為 []
;
1 | Ex: |
總不可能要我一個一個去替換吧!!
這邊考考各位,要怎麼一組替代語法將 $str{}
替換成 $str[]
!
筆者的答案在下方哦 ※1。
結語
Regular Expression
是非常好用的工具,且應用範圍很廣。編譯器對專案全區域搜尋、各程式語言內部使用設置是資料庫應用都可以做出很好的工作效率。
這篇只是筆者對基本 Regular Expression
的介紹。
大家能在利用網路資源,進行更深入的學習。
※1:
1 | 搜尋 RegExp: \$str\{([^\}]*)\} |