ChatGPT 速通手册——让 ChatGPT 来写正则表达式

news2024/9/22 1:24:55

regex 生成

正则表达式可谓是一门让广大程序员们又爱又恨的技术。它易学难精,而且可维护性又差,别说交接给其他同事,同一个人写的正则表达式,三个月后回头再看,也可能完全不知所云。

因此,让 ChatGPT 来写正则表达式,成为很多程序员在接触 ChatGPT 时自然而然想到的场景。

ChatGPT 的训练数据中专门考虑了编程场景数据,所以确实对正则表达式有一定的理解能力。我们可以尝试让 ChatGPT 来解释一些年久失修的正则表达式:

如上图所示,甚至可以让 ChatGPT 一本正经提出一些改进方案。在一定程度上,可以启发不太精通正则表达式的初级程序员。

但如果进一步希望 ChatGPT 可以从原始数据中直接编写出正则表达式,就会碰到很多麻烦。

首先,ChatGPT 更擅长全自动化的语义分析或实体识别,很难接受仅提取指定内容的约束。

如上图所示,当我们直接要求 ChatGPT 生成正则,它看似给出了结果,但多出来很多我们并没有提及的命名捕获。这些多余的内容,反而需要我们再次明确提出去除哪些命名捕获字段才行。

仔细看的话,还可以发现我们最开始的 prompt 里其实已经要求了"Do not capture any other word"。所以再试试调整 prompt,加强一下捕获方面的描述,看看能不能让 ChatGPT 领会到我们期望的意思:

领会到意思以后,输出的结果质量就大幅下降,这个结果可以一眼看出错误非常严重,完全不正确—— "\S" 不可能匹配 url 和 HTTP 之间的空格。

由于 prompt 和 ChatGPT 模型的不确定性,我们多次调换 prompt 的语句次序和写法(就像下面列举的这样),都没能获得更好的结果。

  • "you can write a PCRE regex pattern to only capture them without any other word."
  • "you can write a PCRE regex pattern to only capture them."
  • "Do not capture but only match the other words in the pattern"

此外更重要的是,ChatGPT 生成的正则表达式,有时候肉眼难以定位问题,进行修正。我们回到本节之前全自动化识别生成的正则表达式,似乎一眼看过去应该是正确的:

^(?\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})\s-\s-\s[(?[^]]+)]\s"(?GET|POST|PUT|DELETE)\s(?[^"\s]+)\sHTTP/\d.\d"\s(?\d{3})\s(?\d+)\s"[^"]+"\s"[^"]+"\s"[^"]+"\s(?<response_time>[\d.]+)\s(?<connection_time>[\d.]+)$

但事实上,当我们通过正则表达式的在线调试网站,进行实际测试时,会发现这个表达式其实并不正确:

知道这个正则表达式不对,但是错误具体在哪里,就很难判断了。如果靠肉眼判断,只能一点一点,从后往前删内容,慢慢调试,即使有上图展示的调试工具的帮忙,发现有两个隐藏问题,也不能直接调整正确:

  1. ) Unmatched parenthesis:调试工具说的错误是")"未闭合,但其实是datetime 前后 2 处"["和 1 处"]"没有转义;
  2. / An unescaped delimiter must be escaped; in most languages with a backslash (\):此处调试工具说的错误可以直接修改。

正确可用的正则表达式应该是下面这样。对比 ChatGPT 的输出,可以说相似度极高,问题极难发现,但完全不可用:

^(?\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})\s-\s-\s[(?[^]]+)]\s"(?GET|POST|PUT|DELETE)\s(?[^"\s]+)\sHTTP/\d.\d"\s(?\d{3})\s(?\d+)\s"[^"]+"\s"[^"]+"\s"[^"]+"\s(?<response_time>[\d.]+)\s(?<connection_time>[\d.]+)$

因此,正则表达式作为一种复杂的,难以调试的技术,无法符合 Cohere 提出的三原则中方便定位错误的要求,也不适合采用 ChatGPT 技术进行生成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/456631.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计网 从头自己构建协议】一、libpcap 介绍 手撕以太网帧

上一篇&#xff1a;IndexError: list index out of range 下一篇&#xff1a;[【计网 从头自己构建协议】二、收发 ARP 请求帧与响应帧] 介绍 理论的学习总是枯燥的&#xff0c;想要加深对理论的理解&#xff0c;最好的方法就是自己实践一遍。 想要亲手实现各种协议&#xf…

通讯方式连接成功,其他原因导致的连接失败解决方案

一、电脑中有其他品牌visa导致的冲突&#xff08;以tekvisa为例&#xff09; 1、删除tekvisa 2、下载一个NI Package Manager&#xff0c;卸载里面所有NI的东西 &#xff08;https://www.ni.com/zh-cn/support/downloads/software-products/download.package-manager.html#32…

❀五一劳动节来啦❀

今年“五一”&#xff0c;4月29日至5月3日放假调休&#xff0c;共5天。 如果你在5月4日到5月6日请假3天&#xff0c;加上5月7日周日&#xff0c;就可以形成9天的假期。 一&#xff0c;五一劳动节的由来⭐ 国际劳动节又称“五一国际劳动节”“国际示威游行日”&#xff08;英语…

人生中最好的等待叫做来日可期,社科院与杜兰大学金融管理硕士等你惊艳岁月

有句话说&#xff1a;“去日不可追&#xff0c;来日犹可期”。过去的已经过去&#xff0c;不管好的、坏的都已成为我们的回忆。人生中最好的等待就是未来可期。别辜负现在的好时光&#xff0c;努力做想做的事。社科院与杜兰大学金融管理硕士项目等你惊艳时光。 所有出众者的背…

【计算机网络:自顶向下方法】(三) 运输层 (TCP | UDP | 复用 | 传输原理rdt)

【计算机网络&#xff1a;自顶向下方法】 3.1 概述 传输层协议是在端系统中实现的传输层将发送的应用程序进程接受到的报文转换成传输层分组 (运输层报文段)实现的方法/过程 &#xff1a; 将应用报文划分为较小的块&#xff0c;并为每块加上传输层首部以生成传输层报文段ff。I…

【C++】类和对象(中篇)—— 默认成员函数,const成员函数,运算符重载

前言 类和对象没有技巧&#xff0c;只有多加练习&#xff0c;多多尝试自己完成代码&#xff0c;例如各种运算符的重载&#xff0c;或是实现一个自己的日期类 目录 一、类的六个默认成员函数 二、构造函数 2.1 概念 2.2 特点 2.3 默认无参的构造函数 三、析构函数 3.1 概…

ORB305与CISCO路由器构建L2TP over IPSec VPN操作手册

1、网络拓扑在思科路由器与ORB305之间建立一个安全隧道&#xff0c;对客户路由器端设备子网&#xff0c;与思科路由器端服务器子网之间的数据流进行安全保护&#xff0c;组网拓扑图如图所示。 2、思科路由器端配置指导(此处以多数客户使用专线上网形式为例)Cisco&#xff08;AR…

90年三本程序员,8年5跳,年薪4万变92万……

很多时候&#xff0c;虽然跳槽可能带来降薪的结果&#xff0c;但依然有很多人认为跳槽可以涨薪。近日&#xff0c;看到一则帖子。 发帖的楼主表示&#xff0c;自己8年5跳&#xff0c;年薪4万到92万&#xff0c;现在环沪上海各一套房&#xff0c;再干5年码农&#xff0c;就可以…

2022年NOC大赛创客智慧编程赛道图形化scratch初赛题,包含答案解析

目录 一、单选题 二、多选题 三、判断题 下载打印文档做题: 一、单选题

项目干系人是什么?如何有效管理项目干系人?

项目干系人是指对项目具有利益关系或影响力的个人、团体或组织。他们可能会对项目的目标、范围、进度、成本、质量等方面产生影响&#xff0c;因此&#xff0c;有效地管理项目干系人是项目管理成功的关键之一。 一、干系人识别和分类 项目经理应该首先识别和分类所有与项目有关…

STM32模数转换器(ADC)

1.ADC的简要 我们首先说一下ADC的转换过程&#xff0c;然后说一下原理&#xff0c;当然如果嫌啰嗦可以直接跳过。 ADC是英文Analog-to-Digital Converter缩写&#xff0c;翻译过来就是模数转换器&#xff0c;是指将连续变化的模拟信号转换为离散的数字信号的器件。A/D转换的作…

DiffusionDet源码阅读(1)

本文仅仅适用于已经通读过全文的小伙伴 本文代码节选自 mmdet 中的 DiffusionDet 代码&#xff0c;目前该代码还处于 Development 阶段&#xff0c;所以我博客里写的代码和之后的稳定版本可能稍有不同&#xff0c;不过不用担心&#xff0c;我们只看最关键的部分 DDPM中扩散部…

mybatis中大数据量foreach插入效率对比

1.controller代码 RequestMapping("/testInsert")public String testInsert(Integer sum){testService.testInsert(sum);return "发送成功";}2.service代码 Overridepublic void testInsert(Integer sum) {long start System.currentTimeMillis();List<…

LightGBM面试题

1.偏差 vs 方差? 偏差是指由有所采样得到的大小为m的训练数据集&#xff0c;训练出的所有模型的输出的平均值和真实模型输出之间的偏差。 通常是由对学习算法做了错误的假设导致的描述模型输出结果的期望与样本真实结果的差距。分类器表达能力有限导致的系统性错误&#xff0c…

基于AT89C52单片机的温度检测报警设计

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/87708680?spm1001.2014.3001.5503 源码获取 主要内容&#xff1a; 本系统的设计主要是了解了单片机微型计算机&#xff0c;根据现实生活的需要以及已掌握的理论知识…

Linux应用程序开发:静态库与动态库的制作及使用

目录 一、库的简介二、静态库与动态库的简介三、静态库制作与调用案例四、动态库制作与调用案例 一、库的简介 库是一种可执行的二进制文件&#xff0c;是编译好的代码。使用库可以提高开发效率。而Linux库的种类可分为动态库和静态库。 二、静态库与动态库的简介 1、静态库&a…

第十七届中国CFO大会圆满举办 用友蝉联中国CFO首选智能财务厂商!

4月21日&#xff0c;由财政部指导、《新理财》杂志社主办、用友等单位协办的「数字财务 智能引领」第十七届中国CFO大会在北京圆满举办&#xff01;业内专家、权威学者以及众多来自央国企等知名大型企业的财务领路人荟聚一堂&#xff0c;共襄中国CFO领域的顶尖盛会&#xff0c;…

数字化转型中的石头和沙子问题

作者介绍 朱金衡&#xff0c;西门子Mendix 高级技术咨询顾问及架构师&#xff0c;Mendix Certified 中级培训讲师以及TOGAF Certified 企业架构师。作为专家服务架构师提供咨询服务&#xff0c;如方案设计、开发辅导、故障排除、应用程序审查等&#xff0c;同时创造了许多专门…

【算法】从x的n次方看递归时间复杂度计算

从x的n次方看递归时间复杂度计算 1.循环 这个问题&#xff0c;最简单的办法是用循环 int pow1(int x,int n) {int result 1;for(int i0;i<n;i){result*x;}return result; }如上算法的时间复杂度为O(N)&#xff0c;但还是不够理想。这时尝试使用递归算法 2.递归1 int po…

交换机的电口和光口到底是个啥东东,做网络的这个常识得懂!

在计算机网络中&#xff0c;交换机是一个非常重要的设备&#xff0c;它可以将来自不同设备的数据包进行转发和交换。交换机通常具有多个接口&#xff0c;其中包括光口和电口。在本文中&#xff0c;我们将详细讨论交换机的光口和电口的概念以及它们的不同之处。 电口 电口是交换…