一分鐘重點:正規表達式(regex)那一長串反斜線、括號、星號,本來就不是寫給人腦記的東西。與其每次要從文字裡抓 Email、手機、發票號碼就上網翻別人的式子貼貼看,不如把你要比對的字串樣式用白話講清楚,連同幾個真實範例丟給 AI,請它產出 regex 並把每一段拆開解釋,最後你拿真實資料測過再用。關鍵不在你會不會寫 regex,而在你能不能把「要抓什麼」講死、能不能驗證結果對不對——這兩件事 AI 幫不了你,其餘的它都能扛。
regex 的痛點很一致:它的語法極度精簡又難讀,寫對了很強、寫錯了不報錯只默默抓錯,而且每換一個情境就得重寫。傳統上這是工程師的活,但其實大量需要 regex 的場景是行政、客服、會計在做的——從一堆訂單留言裡撈電話、從對帳單文字裡挑發票號碼、檢查表單填的 Email 格式對不對。這些人不需要變成 regex 高手,只需要學會怎麼把需求交給 AI。
為什麼 regex 特別適合交給 AI
regex 是一種「描述字串長相」的迷你語言。你心裡很清楚要抓什麼(「09 開頭的十碼數字」),但要翻成 09\d{8} 這種寫法就卡住了。AI 剛好補上這段翻譯:你說人話,它出語法。
而且 regex 有個特性讓它跟 AI 特別合拍——它是封閉、規則明確的形式語言,不像寫一整支程式那樣牽涉架構與商業邏輯。AI 對 regex 語法的掌握度非常高,常見樣式幾乎一問就中。你真正要花心力的不是「生出式子」,而是「把需求講清楚」和「驗證結果」,這兩件事正好是 AI 做不來、必須由懂業務的你來把關的部分。
但這也是陷阱所在:正因為 AI 出式子很快,很多人拿了就貼進程式,結果上線才發現漏抓一堆。regex 寫錯不會跳錯誤訊息,它只會安靜地給你錯的結果,所以「驗證」這一關的重要性,遠高於「生成」。
怎麼把需求講清楚:給範例比給形容詞有用
最常見的失敗,是需求講得太模糊。「幫我寫個抓電話的 regex」——這句話 AI 接不住,因為電話有太多種:市話、手機、含區碼、含分機、有沒有國碼。AI 只能猜,猜錯機率很高。
正確的講法是把目標字串的結構講死,並且正面範例跟負面範例都給:
- 正面範例:要被比對到的字串,例如
0912345678、0912-345-678 - 負面範例:長得像但不該被抓的,例如
091234567(少一碼)、1234567890(不是 09 開頭)
有了負面範例,AI 才知道邊界在哪,不會寫出太寬鬆(什麼都抓)或太嚴格(漏抓正常值)的式子。這跟你交代工作給新人是一樣的道理:只說「幫我整理檔案」會做歪,講清楚「要什麼、不要什麼」才做得對。
另一個常被忽略的關鍵是講明用在哪。同一個需求,用在 Python、JavaScript、Excel 的 REGEXEXTRACT、還是命令列的 grep,寫法可能不同。先告訴 AI 環境,它才會給能直接用的版本,不然貼過去可能直接報語法錯誤。
可複製的 Prompt 範本
把下面這段複製下來,照括號裡的提示填,丟給任何一個 AI 助手都能用:
你是一位熟悉正規表達式的工程師。請依下列需求產出一個 regex,並完整解釋。
【要比對的目標】:[用白話描述要抓什麼樣式的字串,例如:台灣手機號碼,09 開頭共十碼]
【使用環境】:[例如 Python re 模組 / JavaScript / Google Sheets REGEXEXTRACT / grep]
【要比對到的正面範例】:
- [範例 1]
- [範例 2]
【不該比對到的負面範例】:
- [範例 1,說明為什麼不該中]
- [範例 2]
【其他條件】:[例如是否容許分隔符號、是否要處理全形數字、是否需要分組擷取區碼與號碼]
請依以下格式回覆:
1. 最終 regex(放在程式碼區塊)
2. 逐段解釋:把這個 regex 拆成幾個部分,每一段代表什麼意思,用中文說明
3. 用我給的正面與負面範例逐筆驗證,列出每筆會不會被比對到
4. 提醒這個式子有哪些容易出包的邊界情況
這個範本的重點在最後三項:逐段解釋讓你看得懂、會維護;逐筆驗證讓你當場看到結果對不對;邊界提醒則幫你預先想到那些還沒遇到的怪資料。看不懂的 regex 不要用,這是底線——將來出錯你連從哪查起都不知道。
台灣常見場景的 regex 範例
下面幾個是台灣實務最常碰到的樣式,可以直接拿來理解,也可以當成給 AI 的起點。
台灣手機號碼,09 開頭十碼:
^09\d{8}$
拆開看:^ 是字串開頭,09 是固定前兩碼,\d{8} 是接八個數字,$ 是字串結尾。^ 和 $ 這對邊界很重要,少了它,A0912345678X 這種前後有雜訊的字串也會被當成中,這是新手最常踩的坑。
如果資料裡手機常被寫成 0912-345-678 或 0912 345 678,可以容許分隔符號:
^09\d{2}[-\s]?\d{3}[-\s]?\d{3}$
[-\s]? 表示「一個連字號或空白,可有可無」。但更實務的做法是先把分隔符號和全形數字正規化掉再比對,regex 反而能寫得乾淨。
台灣統一發票號碼,兩碼英文字母加八碼數字:
^[A-Z]{2}\d{8}$
[A-Z]{2} 是兩個大寫英文字母,\d{8} 是八個數字,所以 AB12345678 會中。若資料可能出現小寫,把 [A-Z] 改成 [A-Za-z],或在比對前統一轉大寫。
Email 的基本樣式(夠日常用,但不是 RFC 完整版):
^[\w.+-]+@[\w-]+\.[\w.-]+$
統一編號(公司行號八碼數字):
^\d{8}$
要注意統編真正的正確性還牽涉檢查碼演算法,光靠 regex 只能驗「長相像」,不能驗「真的存在」。這就是 regex 的界線:它管格式,不管語意與真偽。需要驗檢查碼時,得另外寫邏輯或請 AI 補一段運算。
真實案例:客服跟會計怎麼用
宜蘭一家做寢具的電商,客服小芸每天要從官網表單、LINE 對話、Email 匯出的文字裡,把客人留的手機撈出來建追蹤名單。以前她一筆筆用眼睛找、複製貼上,一天兩三百筆要耗掉一個多小時,還常漏。她把需求跟一批真實留言樣本丟給 AI,講明「要抓 09 開頭十碼,留言裡會夾雜全形數字跟『手機:』這種前綴」,AI 給了正規化加比對的兩段式做法,現在她把整批文字貼進去就一次撈完,原本一小時的事剩不到五分鐘,漏抓的情況也幾乎沒了。
另一個是台中一家會計事務所的助理阿哲,月底要從幾十份廠商寄來的對帳單文字檔裡,核對統一發票號碼。發票號碼是兩碼字母加八碼數字,但文件裡也有一堆其他英數混合的編號,肉眼挑很容易看花。他請 AI 寫了一個帶邊界條件的 regex,並要求逐段解釋跟用他的真實樣本驗證。第一版誤抓了一個產品料號,他把那筆字串回報給 AI,AI 加上前後不可接其他英數字的條件後就準了。現在對帳前他先用這支式子把所有發票號碼一次列出來,再跟系統對,省下的不只是時間,更是減少了人工核對的漏看。
這兩個例子的共通點:他們都不會寫 regex,但都做對了三件事——需求講清楚、附真實範例、出錯就回報具體案例。
驗證與除錯:regex 不報錯,所以你得自己抓
再強調一次,regex 寫錯不會跳錯誤,它只給你錯的結果。所以驗證不是選配,是必做。
最直接的做法是把式子貼到 regex101.com 這類線上工具,左邊放式子、右邊貼一堆真實樣本,立刻看到哪些被反白、哪些沒中。或者直接請 AI 用你的樣本逐筆跑一遍。重點是測試樣本要涵蓋極端情況:最短的、最長的、有全形的、前後有空白的、長得很像但其實不該中的。平凡的正常值通常都會過,會出包的永遠是邊界。
除錯時有個原則:不要叫 AI「重寫一個」,而是把出問題的具體字串回報給它。告訴它「這筆 0912 345 678 該中卻沒中」或「這筆料號 AB1234567X 不該中卻中了」,AI 就能針對性地調整邊界條件。給案例的修正,遠比抽象地說「不太準」有效。
常見錯誤與該知道的限制
幾個反覆出現的坑:
- 沒給範例字串:只用形容詞描述需求,AI 只能猜,準確率大打折扣。範例是 regex 需求的命脈。
- 忘了邊界:少了
^和$,式子會在一長串文字裡到處亂中。要抓「完整一筆」還是「文字中的片段」,是兩回事,要講明。 - 貪婪比對:
.*預設是貪婪的,會盡量多吃,常一口氣吃過頭。需要最少比對時要用.*?,這是 AI 容易在沒提醒下出包的地方,看到.*就多留意。 - 沒考慮全形與變形:台灣資料常混全形數字、全形括號、中文冒號前綴,這些 regex 預設不會處理,要嘛先正規化、要嘛在需求裡明講。
- 拿假資料測就上線:自己編的範例往往太乾淨,真實資料的髒亂程度永遠超乎想像。一定要用真實樣本測。
至於限制,要誠實認清兩點。第一,複雜或語意性的需求,regex 不一定是最佳解。抓格式固定的編號、日期、Email,regex 又快又準;但要抓「地址」「公司全名」「一句話裡的人名」這種千變萬化、得靠理解判斷的東西,硬湊 regex 會越寫越長還抓不準,這時直接請 AI 用語意萃取反而省事。第二,regex 只管格式,不管真偽。它能驗統編是八碼數字,但驗不了這個統編真的登記存在;能驗發票號碼長相對,但驗不了它有沒有被開立過。格式正確不等於資料正確,這條線要清楚。
結語:你負責講清楚跟驗證,剩下交給 AI
regex 從來就不該是擋住一般人處理資料的門檻。現在你不必把那串符號背起來,只要學會把「要抓什麼樣式的字串」講清楚、附上真實的正反面範例、再拿真實資料把結果驗過。生成與解釋交給 AI,需求與把關留在你手上。
下次再遇到要從一堆文字裡撈手機、挑發票號碼、檢查 Email 格式,別再上網翻別人的式子瞎貼了。打開 AI 助手,用上面的 Prompt 範本把需求填一填,產出後逐段看懂、逐筆驗證,半小時內就能拿到一支真正能用、而且你看得懂、改得動的 regex。先挑一個你手邊最常重複的撈資料工作,今天就試一次。
本文由 AgentAI 智庫(agentai.tw) 整理製作,台灣最大的繁體中文 AI 知識站。
常見問題 FAQ
完全不懂程式,用 AI 寫 regex 真的可行嗎?
AI 產生的 regex 可以直接貼到程式裡用嗎?
不同語言或工具的 regex 寫法一樣嗎?
台灣手機號碼的 regex 怎麼寫比較保險?
regex 抓統一發票號碼會很難嗎?
什麼情況下不該硬用 regex?
延伸閱讀
每週把這類實戰教學寄給你
訂閱 AgentAI 智庫情報週報,新的 Prompt、AI Skills、工作流與教學第一時間收到。
免費 · 隨時取消