更新於 2023/08/15閱讀時間約 3 分鐘

Regex Replace 帶來的方便

前言

在其他語言會時常使用正規表達式來幫字串進行 Filter,在遊戲製作裡面比較遇不到處理使用者的字串輸入、資料庫查詢結果的情況,但在編輯程式碼,有搜尋(Ctrl+F)、取代(Ctrl+H)需求時使用 Regex 也能提升工作效率。


打開

為了快速實踐,可以把常用的文字編輯器、IDE 開起來,隨便開個專案,按下 Ctrl+H 開啟取代的選單,並且將 Regex 選項勾選。

Visual Studio

VS Code

就能一起愉快玩耍了。


正規表達式

我們來說說正規表達式的寫法。

特殊字元

有些特殊字元,如果需要比對它們,則需要在前面加上跳脫字元 \ ,比如原意字元:

^$()*+?.[\{|

或是待會要說到的特殊字元們。


常用的特殊字元

這邊要說一些常用的特殊字元。

  1. ^
    指的是 開頭
  2. *
    符合條件零次或多次。
  3. ?
    符合條件一次。
  4. +
    符合條件至少一次。
  5. $
    指的是 結尾
  6. |
    指的是 ,可以比對多個條件。
  7. \d
    指的是 數字(0-9)
  8. \D
    指的是 非數字(not 0-9)
  9. \w
    指的是 字元
  10. \s
    指的是 空白字元
  11. \S
    指的是 非空白字元
  12. \n
    指的是 換行
  13. \b
    指的是 詞邊界
  14. \B
    指的是 非詞邊界


樣式

() 指的是樣式,將條件包在括弧裡面,在取代功能常使用。
也可以搭配特殊字元 | 多條件比對。


集合

[] 指的是集合,比對內容 可以是被包在括弧內的任何內容

使用時可以用 - 來描述一個字元範圍。

如果是要 排除集合內容 ,則需要加上 ^ 字元。

我們用 Sword Art Online 這個詞來看幾個例子:

[saoooo]Sword Art Online

沒錯,你多打幾個 o 是沒有幫助的。

[^(a-o)(\s)]S word Ar t Online

排除了 a-o 還有 \s(空白字元),之所以在字之間加上空白,是因為它們並不是以一個詞的形式被檢索到。


次數

{n} 指的是指定內容出現的次數(n ≧ 0)。一樣拿 Sword Art Online 舉例:

(\b[a-z]{6}\b) → Sword Art Online

記得嗎, \b 是詞邊界,所以相當於比對了 詞邊界 + [a-z] x 6次 + 詞邊界


結合VS應用

基本上只要使用上面所說的組合,就能做很多條件篩選。

如果需要使用已經比對到的 樣式 ,在搜尋使用 \n ,取代使用 $n (n 為第幾個樣式,從 1 開始)。

搜尋

例子,這次是 Starburst Stream

(\w)\w*\1\w*Startburst Stream

\w 是字元([A-Za-z0-9_]),而 \w* 是符合字元零次或多次,組合起來就是 字元(樣式1) + 任意字元 + 樣式1 + 任意字元

所以這個條件表示 有重複字元的詞


取代

使用取代時,有幾個方便的模式:

  1. \l | \L
    篩選出來的詞 第一個 | 所有 字轉為小寫。
  2. \u | \U
    篩選出來的詞 第一個 | 所有 字轉為大寫。

最簡單而且常用的例子:

搜尋:(\w+) | 取代:\U$1

(\w+) 能夠把所有詞篩選出來,而這邊使用 \U 能把 $1(樣式1) 所有字轉為大寫。


總結

以前我處理遊戲串接後端的 Data Model,寫各個 [JsonProperty] 會花不少心力,自從使用 Regex Replace 之後就節省了非常多時間。

這篇可能沒有講得非常清楚,但還是希望大家都能掌握這個好東西。


分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.