在其他語言會時常使用正規表達式來幫字串進行 Filter,在遊戲製作裡面比較遇不到處理使用者的字串輸入、資料庫查詢結果的情況,但在編輯程式碼,有搜尋(Ctrl+F)、取代(Ctrl+H)需求時使用 Regex 也能提升工作效率。
為了快速實踐,可以把常用的文字編輯器、IDE 開起來,隨便開個專案,按下 Ctrl+H 開啟取代的選單,並且將 Regex 選項勾選。
就能一起愉快玩耍了。
我們來說說正規表達式的寫法。
有些特殊字元,如果需要比對它們,則需要在前面加上跳脫字元 \
,比如原意字元:
^$()*+?.[\{|
或是待會要說到的特殊字元們。
這邊要說一些常用的特殊字元。
^
*
?
+
$
|
\d
\D
\w
\s
\S
\n
\b
\B
()
指的是樣式,將條件包在括弧裡面,在取代功能常使用。
也可以搭配特殊字元 |
多條件比對。
[]
指的是集合,比對內容 可以是被包在括弧內的任何內容。
使用時可以用 -
來描述一個字元範圍。
如果是要 排除集合內容 ,則需要加上 ^
字元。
我們用 Sword Art Online
這個詞來看幾個例子:
[saoooo]
→S
wo
rdA
rtO
nline
沒錯,你多打幾個 o 是沒有幫助的。
[^(a-o)(\s)]
→S
w
or
d Ar
t
Online
排除了 a-o
還有 \s(空白字元)
,之所以在字之間加上空白,是因為它們並不是以一個詞的形式被檢索到。
{n}
指的是指定內容出現的次數(n ≧ 0)。一樣拿 Sword Art Online
舉例:
(\b[a-z]{6}\b)
→ Sword ArtOnline
記得嗎, \b
是詞邊界,所以相當於比對了 詞邊界
+ [a-z] x 6次
+ 詞邊界
。
基本上只要使用上面所說的組合,就能做很多條件篩選。
如果需要使用已經比對到的 樣式 ,在搜尋使用 \n
,取代使用 $n
(n 為第幾個樣式,從 1
開始)。
例子,這次是 Starburst Stream
:
(\w)\w*\1\w*
→Startburst
Stream
\w
是字元([A-Za-z0-9_]
),而 \w*
是符合字元零次或多次,組合起來就是 字元(樣式1)
+ 任意字元
+ 樣式1
+ 任意字元
。
所以這個條件表示 有重複字元的詞 。
使用取代時,有幾個方便的模式:
\l
| \L
第一個
| 所有
字轉為小寫。\u
| \U
第一個
| 所有
字轉為大寫。最簡單而且常用的例子:
搜尋:(\w+)
| 取代:\U$1
(\w+)
能夠把所有詞篩選出來,而這邊使用 \U
能把 $1(樣式1)
所有字轉為大寫。
以前我處理遊戲串接後端的 Data Model,寫各個 [JsonProperty]
會花不少心力,自從使用 Regex Replace 之後就節省了非常多時間。
這篇可能沒有講得非常清楚,但還是希望大家都能掌握這個好東西。