譯者 | 陳峻
審校 | 重樓
不知你是否聽說過由人工智能(AI)來生成正則表達式(Regex)。這是一個有趣的領域,鑒于人工智能在文本分析方面優(yōu)異的表現,它們足以開始“整理”各種現有表達式工具了。
作為開發(fā)人員,我們可能更希望將人工智能作為開發(fā)系統(tǒng)的一部分,從日常自己的工作流中提取信息,生成表達式,而不是停留在被動地接受由OpenAI等公司提供的所謂以用戶為中心的平臺方案的層面上。下面,我將從正則表達式的生成原理說起,向你介紹兩款可供免費使用的此類工具。
表達式生成原理
讓我們從一個簡單的倫敦旅行問題開始:“請問,從Walthamstow到Pimlico的最佳旅行方式是什么?”對此,ChatGPT能夠輕松地從該問句中提取起點和終點,并給出如下圖所示的答復:
該問題并不難回答。如果你愿意,還可以通過一問一答的方式,獲取更多的最新信息。上述問例的核心在于,算法準確地捕捉了“從(from)”和“到(to)”之間的文本,進而可以生產一個如下簡單的正則表達式案例,即:
/from ([A-Z][a-z]*) to ([A-Z][a-z]*)/
如下圖所示,通過訪問www.regex101.com,我們可以看到其詳細的過程:
從下面整理的信息中,我們可以看出,兩個“捕獲組(capture group)”都成功捕捉到了起點和終點信息:
因此,假設我們需要獲取一個與上面類似的正則表達式,便可以借助人工智能工具來實現。總體而言,我們需要人工智能能夠做到:
- 主要目的是能夠生成正確的正則表達式,然后將其應用到自己的程序代碼中。
- 利用人工智能的優(yōu)勢,理解句子中的情感表達,并通過起點和終點等關鍵字,來確認正在尋找的方向。
- 用戶可以在處理代碼的同時,快速領悟正則表達式的語法。
- 根據人工智能給出的多種不同的正則表達式方式,針對實際問題,選取最優(yōu)解。
Regex.ai
如果你持續(xù)關注正則表達式領域的話,也許會和我一樣,首先想到的是Regex.ai網站。該網站的使用方式既有趣又簡單:你只需創(chuàng)建一個短語,并加入需要被提取的單詞,那么該網站就會生成各種候選的正則表達式。讓我們以上述旅行為例往下看:
如你所見,網站上的人工智能已按要求提取了起點和終點。
在此基礎上,我按下“運行(run)”按鈕,等待幾秒鐘后,便得到以下信息:
在上面的截圖中,你可以看到有四個不同的代理進行了四次不同的嘗試。其正則表達式位于每一列的上方,對應的結果位于下方。如你所見,只有一列提取到了正確的回復(即:代理B的兩組捕獲是正確的)。接著,在我點擊代理B的結果后,將會出現如下內容:
由上面的截圖可知,人工智能確實已正確地理解了問句的意思(盡管它可能還沒有完全理解提問者強調的是起點和終點)。
從技術上講,由于它使用了單詞邊界(如:開頭的\b)和空白匹配器(\s),而不僅僅是空格,因此其結果比較清晰可讀。同時,考慮到真實地名單詞可能存在不僅僅出現首字母為大寫的情況,因此相較于[A-Z][a-z]+,它使用了更為合理的[A-Z][a-z]*。
RegExGPT.app
與Regex.ai不同,網站RegExGPT.app并不會去捕獲各種詞組,而且采取如下圖所示的另一種方法:
通過在指定的問題區(qū)域內,使用英語來詢問提問者希望提供什么,該網站會給出創(chuàng)意性的組合。不僅如此,它還為我們提供了一套可行的正則表達式代碼段,而且其效果還不錯:
如上圖所示,首先,為了理解上下文,它會將輸出函數命名為“extractRoute”。
接著,它會對所提供的正則表達式進行全面解釋(請參閱下圖):
而且,它甚至還會給出一個如何在JavaScript中使用的示例:
雖然上述正則表達式本身有些復雜,但是它能夠完整地解釋其推理過程。其中,括號用于捕獲,且被正則表達式賦予了優(yōu)先權,而(?: ) 在此表示為非捕獲組(non-capturing group)。非捕獲組可用于完成前者“from”的捕獲,而無需為后者“to”產生開銷。
總的說來,雖然表達式(\w+(?:\s\w+)*)看起來比較復雜,但是其作用足以捕捉到包含了多個關鍵字(multi-word)的表達式,且不會弄錯捕捉組。如下圖所示,假設我們必須從Green Park出發(fā),而不是從Walthamstow出發(fā):
顯然,地名Green Park中的空格并沒有造成任何問題,而其他生成工具則不然。
目前,我僅發(fā)現了上述這兩款可供免費使用的人工智能工具,能夠生成滿足用戶不同場景需求的正則表達式。如果你有更好的AI工具值得推薦,不妨分享給我吧!
譯者介紹
陳峻(Julian Chen),51CTO社區(qū)編輯,具有十多年的IT項目實施經驗,善于對內外部資源與風險實施管控,專注傳播網絡與信息安全知識與經驗。
原文標題:Using AI to Help Developers Work with Regular Expressions,作者:David Eastman