正則表達式生成器提示詞(自然語言描述 → 正則 + 逐段解釋 + 測試用例)

要校驗手機號、提取日誌字段、批量替換文本卻寫不出正則時用:說清要匹配什麼、不該匹配什麼,得到指定語言可直接用的正則、逐段拆解、正反測試用例和可運行的測試代碼。

NNathaniel bigo··轉載 原文·AI 輔助撰寫
通用大模型 對話模型通用
【角色】你是一名正則表達式專家,熟悉 PCRE、Python re、JavaScript、Java 和 Go(RE2)之間的語法差異,也清楚回溯失控(ReDoS)的風險。

【需求】
- 要匹配的內容:[要匹配的內容描述]
- 用途:[整串校驗/從文本中提取/查找替換]
- 運行環境:[Python/JavaScript/Java/Go/編輯器]
- 一定要匹配的樣例(每行一個):
  [應匹配的樣例]
- 一定不能匹配的樣例(每行一個):
  [不應匹配的樣例]
- 需要提取的字段(沒有就寫無):[要捕獲的部分]

【任務】
1. 先用一兩句話複述匹配規則;我給的樣例之間如果互相矛盾,或者規則有歧義(比如是否允許前後空格、是否區分大小寫),先列出來問我。
2. 給出正則本體,放在單獨的代碼塊裏,便於複製。
3. 用表格逐段解釋:片段 | 含義 | 為什麼這樣寫。
4. 列出正例和反例各至少 5 個,包含邊界情況(空串、超長、全角字符、換行結尾、Unicode 數字)。
5. 寫一段在我的運行環境裏可直接運行的測試代碼,把正反例都斷言一遍。
6. 說明在其他常見環境裏要改什麼(比如 Go 不支持環視和反向引用,JavaScript 需要 u 標誌才能正確處理 emoji)。

【約束】
- 整串校驗必須錨定開頭結尾;Python 裏優先用 fullmatch 或 \Z,因為 $ 允許匹配末尾換行之前的位置。
- 避免嵌套量詞這類可能災難性回溯的寫法,如果確實需要,說明風險和替代方案。
- 能用簡單正則 + 代碼判斷解決的(例如日期是否真實存在、身份證校驗位),說明「正則只做格式初篩」,不要硬寫一個超長正則。
- 不確定某個語法在我的環境是否支持時,明確標註「需在目標環境驗證」。

【輸出格式】
規則複述 → 正則(代碼塊)→ 逐段解釋表 → 正反例表 → 測試代碼 → 跨環境注意事項。

高亮處換成你自己的內容:[要匹配的內容描述]、[整串校驗/從文本中提取/查找替換]、[應匹配的樣例]、[不應匹配的樣例]、[要捕獲的部分]

ChatGPT Plus 充值

已被複製 0 次

使用說明

怎麼填變量:正反樣例是最重要的輸入,尤其是「不能匹配」的樣例——很多正則不是漏匹配,而是匹配了不該匹配的東西。[用途] 決定寫法:整串校驗要錨定,從長文本中提取則不能錨定、要考慮單詞邊界。

常見坑:

  • Python 3 裏 \d 預設會匹配全角數字和其他 Unicode 數字,只想要 0–9 就加 re.ASCII 或直接寫 [0-9];JavaScript 的 \d 只匹配 ASCII 數字。
  • 編輯器(VS Code、Notepad++)的替換語法和代碼不同,引用分組可能是 $1 也可能是 \1,要在 [運行環境] 裏寫清楚。
  • 正則能判斷「格式像不像」,不能判斷「真不真」:2 月 30 日、已註銷的手機號,都要靠代碼或接口判斷。

追問技巧:拿到結果後把真實數據裏的幾十行貼回去,說「標出哪些行沒匹配上、哪些行誤匹配了」;性能敏感的場景追問「這個正則在什麼輸入下會變慢」。

示例輸出

示例,僅供參考(需求:校驗中國大陸 11 位手機號,Python)
1[3-9]\d{9}
片段含義
1第一位固定為 1
[3-9]第二位為 3–9
\d{9}後面 9 位數字(配合 re.ASCII,只認 0–9)
python
import re

PHONE = re.compile(r"1[3-9]\d{9}", re.ASCII)
cases = {
    "13812345678": True,
    "12812345678": False,   # 第二位不合法
    "1381234567": False,    # 只有 10 位
    "13812345678\n": False, # fullmatch 不會放過末尾換行
    "13812345678": False,  # 全角數字
}
for s, want in cases.items():
    assert bool(PHONE.fullmatch(s)) == want, repr(s)
print("全部通過")
改編自 @ersinyilmaz / f/awesome-chatgpt-prompts「RegEx Generator」,許可證 CC0 1.0。

同款作品

用這條提示詞做出來的作品;原作者會因此獲得積分

做同款

還沒有同款,來做第一個。

Nathaniel 的更多內容

同主題

同模型

0 條評論

登入 後參與評論

還沒有評論,來搶沙發~