前言
在其他語言會時常使用正規表達式來幫字串進行 Filter,在遊戲製作裡面比較遇不到處理使用者的字串輸入、資料庫查詢結果的情況,但在編輯程式碼,有搜尋(Ctrl+F)、取代(Ctrl+H)需求時使用 Regex 也能提升工作效率。
打開
為了快速實踐,可以把常用的文字編輯器、IDE 開起來,隨便開個專案,按下 Ctrl+H 開啟取代的選單,並且將 Regex 選項勾選。
Visual Studio

VS Code
就能一起愉快玩耍了。
正規表達式
我們來說說正規表達式的寫法。
特殊字元
有些特殊字元,如果需要比對它們,則需要在前面加上跳脫字元 \ ,比如原意字元:
^$()*+?.[\{|或是待會要說到的特殊字元們。
常用的特殊字元
這邊要說一些常用的特殊字元。
^
指的是 開頭 。*
符合條件零次或多次。?
符合條件一次。+
符合條件至少一次。$
指的是 結尾 。|
指的是 或 ,可以比對多個條件。\d
指的是 數字(0-9)。\D
指的是 非數字(not 0-9)。\w
指的是 字元。\s
指的是 空白字元。\S
指的是 非空白字元。\n
指的是 換行。\b
指的是 詞邊界。\B
指的是 非詞邊界。
樣式
() 指的是樣式,將條件包在括弧裡面,在取代功能常使用。
也可以搭配特殊字元 | 多條件比對。
集合
[] 指的是集合,比對內容 可以是被包在括弧內的任何內容。
使用時可以用 - 來描述一個字元範圍。
如果是要 排除集合內容 ,則需要加上 ^ 字元。
我們用 Sword Art Online 這個詞來看幾個例子:
[saoooo]→SwordArtOnline
沒錯,你多打幾個 o 是沒有幫助的。
[^(a-o)(\s)]→Sword ArtOnline
排除了 a-o 還有 \s(空白字元),之所以在字之間加上空白,是因為它們並不是以一個詞的形式被檢索到。
次數
{n} 指的是指定內容出現的次數(n ≧ 0)。一樣拿 Sword Art Online 舉例:
(\b[a-z]{6}\b)→ Sword ArtOnline
記得嗎, \b 是詞邊界,所以相當於比對了 詞邊界 + [a-z] x 6次 + 詞邊界。
結合VS應用
基本上只要使用上面所說的組合,就能做很多條件篩選。
如果需要使用已經比對到的 樣式 ,在搜尋使用 \n ,取代使用 $n (n 為第幾個樣式,從 1 開始)。
搜尋
例子,這次是 Starburst Stream :
(\w)\w*\1\w*→StartburstStream
\w 是字元([A-Za-z0-9_]),而 \w* 是符合字元零次或多次,組合起來就是 字元(樣式1) + 任意字元 + 樣式1 + 任意字元。
所以這個條件表示 有重複字元的詞 。
取代
使用取代時,有幾個方便的模式:
\l|\L
篩選出來的詞第一個|所有字轉為小寫。\u|\U
篩選出來的詞第一個|所有字轉為大寫。
最簡單而且常用的例子:
搜尋:(\w+)| 取代:\U$1
(\w+) 能夠把所有詞篩選出來,而這邊使用 \U 能把 $1(樣式1) 所有字轉為大寫。
總結
以前我處理遊戲串接後端的 Data Model,寫各個 [JsonProperty] 會花不少心力,自從使用 Regex Replace 之後就節省了非常多時間。
這篇可能沒有講得非常清楚,但還是希望大家都能掌握這個好東西。

















