审校 | 重楼
不知你是否听说过由人工智能(AI)来生成正则表达式(Regex)。这是一个有趣的领域,鉴于人工智能在文本分析方面优异的表现,它们足以开始“整理”各种现有表达式工具了。
作为开发人员,我们可能更希望将人工智能作为开发系统的一部分,从日常自己的工作流中提取信息,生成表达式,而不是停留在被动地接受由OpenAI等公司提供的所谓以用户为中心的平台方案的层面上。下面,我将从正则表达式的生成原理说起,向你介绍两款可供免费使用的此类工具。
表达式生成原理
让我们从一个简单的伦敦旅行问题开始:“请问,从Walthamstow到Pimlico的最佳旅行方式是什么?”对此,ChatGPT能够轻松地从该问句中提取起点和终点,并给出如下图所示的答复:
该问题并不难回答。如果你愿意,还可以通过一问一答的方式,获取更多的最新信息。上述问例的核心在于,算法准确地捕捉了“从(from)”和“到(to)”之间的文本,进而可以生产一个如下简单的正则表达式案例,即:
/from ([A-Z][a-z]*) to ([A-Z][a-z]*)/
如下图所示,通过访问www.regex101.com,我们可以看到其详细的过程:
从下面整理的信息中,我们可以看出,两个“捕获组(capture group)”都成功捕捉到了起点和终点信息:
因此,假设我们需要获取一个与上面类似的正则表达式,便可以借助人工智能工具来实现。总体而言,我们需要人工智能能够做到:
- 主要目的是能够生成正确的正则表达式,然后将其应用到自己的程序代码中。
- 利用人工智能的优势,理解句子中的情感表达,并通过起点和终点等关键字,来确认正在寻找的方向。
- 用户可以在处理代码的同时,快速领悟正则表达式的语法。
- 根据人工智能给出的多种不同的正则表达式方式,针对实际问题,选取最优解。
Regex.ai
如果你持续关注正则表达式领域的话,也许会和我一样,首先想到的是Regex.ai网站。该网站的使用方式既有趣又简单:你只需创建一个短语,并加入需要被提取的单词,那么该网站就会生成各种候选的正则表达式。让我们以上述旅行为例往下看:
如你所见,网站上的人工智能已按要求提取了起点和终点。
在此基础上,我按下“运行(run)”按钮,等待几秒钟后,便得到以下信息:
在上面的截图中,你可以看到有四个不同的代理进行了四次不同的尝试。其正则表达式位于每一列的上方,对应的结果位于下方。如你所见,只有一列提取到了正确的回复(即:代理B的两组捕获是正确的)。接着,在我点击代理B的结果后,将会出现如下内容:
由上面的截图可知,人工智能确实已正确地理解了问句的意思(尽管它可能还没有完全理解提问者强调的是起点和终点)。
从技术上讲,由于它使用了单词边界(如:开头的\b)和空白匹配器(\s),而不仅仅是空格,因此其结果比较清晰可读。同时,考虑到真实地名单词可能存在不仅仅出现首字母为大写的情况,因此相较于[A-Z][a-z]+,它使用了更为合理的[A-Z][a-z]*。
RegExGPT.app
与Regex.ai不同,网站RegExGPT.app并不会去捕获各种词组,而且采取如下图所示的另一种方法:
通过在指定的问题区域内,使用英语来询问提问者希望提供什么,该网站会给出创意性的组合。不仅如此,它还为我们提供了一套可行的正则表达式代码段,而且其效果还不错:
如上图所示,首先,为了理解上下文,它会将输出函数命名为“extractRoute”。
接着,它会对所提供的正则表达式进行全面解释(请参阅下图):
而且,它甚至还会给出一个如何在JavaScript中使用的示例:
虽然上述正则表达式本身有些复杂,但是它能够完整地解释其推理过程。其中,括号用于捕获,且被正则表达式赋予了优先权,而(?: ) 在此表示为非捕获组(non-capturing group)。非捕获组可用于完成前者“from”的捕获,而无需为后者“to”产生开销。
总的说来,虽然表达式(\w+(?:\s\w+)*)看起来比较复杂,但是其作用足以捕捉到包含了多个关键字(multi-word)的表达式,且不会弄错捕捉组。如下图所示,假设我们必须从Green Park出发,而不是从Walthamstow出发:
显然,地名Green Park中的空格并没有造成任何问题,而其他生成工具则不然。
目前,我仅发现了上述这两款可供免费使用的人工智能工具,能够生成满足用户不同场景需求的正则表达式。如果你有更好的AI工具值得推荐,不妨分享给我吧!
译者介绍
陈峻(Julian Chen),51CTO社区编辑,具有十多年的IT项目实施经验,善于对内外部资源与风险实施管控,专注传播网络与信息安全知识与经验。
原文Using AI to Help Developers Work with Regular Expressions,作者:David Eastman