【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

新年里学些正则表达式吧!

  • 2013-01-22
  • 本文字数:1761 字

    阅读完需:约 6 分钟

新年里如果你正想学些什么,那么学习正则表达式是肯定不会错的。正则表达式在各主要平台上均可使用,学会这种技能会对你的生涯产生持续的红利。开始学习的一种途径是 Firas Dib 的正则表达式101

除了一般的试题外,RegEx 101 还提供了一个正则表达式的解释器。它将正则表达式划分为不同部分,并解释每个部分的工作原理。这样的功能不仅对初学者有用,更有助于那些想了解遗留代码中正则表达式作用的成熟开发人员。

InfoQ:请问你创建 regex101.com 的灵感来源于什么?

Firas Dib:多年前我就有个 IRC 的 Bot,它可以解析输入的正则表达式。不久前,在创建 regex101 前,我已经在所说的 Bot 上实现了自测的功能。一开始,这确实是个有意思的项目,但是随着时间的推移,事情越来越变得一发不可收拾,难以管理,这是因为项目使用 mIRC 的脚本语言编写。而且,这还不是唯一的限制。由于所有的通讯都是通过 IRC(仅限于文本)方式完成的,并不直观,很难吸引用户使用它。Bot 的解析部分受到了广泛的感激,但同样也令人讨厌,因为他会向 IRC 通道发出大量的信息。于是我开始思考,有没有更好的方式来提供这些服务,而没有我所面临的这些限制呢?当然是一个网站了!于是,我就开始将写的不怎么好的 mIRC 代码转换为写的还凑合的 PHP 代码。

InfoQ:请问你开发这个网站投入了多长时间?

Firas Dib:大概是去年夏天,我开始建设这个网站。

我也想提一下的是,我很清楚网站与 rubular 有很多设计相似性。这并不是我设计的初衷。但是呢,在设计过程中,整个设计与 rubular 越来越相似(因为这样一个布局很自然也很不错),最终,我直接借用了 rubular 网站上的快速参考和其它一些周边的东西。当然,我联系了他(rubular 的作者),解释了这个网站的情况,如果有什么问题,他可以给我发邮件,我会处理。上述内容我也添加到了网站的致谢里面。我提到这个是因为我不希望有人认为我做了抄袭或类似的事情;网站的所有代码都是我自己花了很多时间编写的(除了快速参考之外)。

InfoQ:有种说法说正则表达式是一种“只写”的语言。也就是说,多数程序员写出的正则表达式很难被理解。你对此有何看法?

Firas Dib:这种说法可能很正确,这也是我创建这个服务的部分原因。你看,人们加入 IRC 并通过 Bot 解析所提交的正则表达式,然后离开。也可能过会儿回来再做类似的事情。现在有了这个网站,他们可以把网页一直开着,或者为自己的正则表达式创建一个永久链接。不仅如此,他们还可以用这个网站测试用例并将自动解析的结果给同事参考,甚至还可以把这个结果作为代码的注释!从某种程度上,这样可以有效避免或者减少“只写”的正则表达式。

InfoQ:我不太熟悉你所说的 Bot。能详细说下吗?

Firas Dib:Bot 是我使用的一个 mIRC 客户端,运行在我朋友的服务器上。其实没什么惊艳的功能。我经常使用 mIRC 的原因不过是因为我十分熟悉 mIRC 的客户端,年轻时常常在 mIRC 里面编写脚本。

InfoQ:解释器的功能是如何编写的?

Firas Dib:解释器的特性实际上是使用了正则表达式来分解正则表达式(是不是好像盗梦空间?)。好吧,不全都是正则表达式,但是可以用正则表达式的地方我都用了。虽然听起来古怪,但因为 PCRE 库如此强大,并且支持递归,我可以通过它来精确解析输入的参数。为了实现这种方式,我不得不通读 PCRE 手册好多遍。相信我,这不是什么好玩的事情。即使如此,我的服务也不是完全兼容 PCRE 的。我略过了一些几乎没人使用的特性。

InfoQ:这个站点是使用 PHP 版本的正则表达式编写的。对于那些通过别的方式实现(.NET、Java 等)的用户,有没有你认为特别的地方需要提醒他们的?

Firas Dib:是的,站点是使用 PHP 编写的,使用的是(非常强大的)PCRE 库。PCRE 库支持了很多其他库所不支持的特性,比如递归、环视和条件语句。人们需要知道自己使用的语言在正则表达式中的限制。我倒是可以帮助用户解决简单的问题,如转义或类似的问题。比如,Java 需要你对反斜线进行转义:输出\w 时应当键入\w。目前已经有很多用户要求增加这个功能,我也肯定会考虑这个问题。

查看英文原文 Learn some RegEx for the New Year


感谢杨赛对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2013-01-22 04:062957
用户头像

发布了 36 篇内容, 共 13.4 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

Java 输入一个字符串格式日期,获取对应的自然月开始结束时间,对应的自然年开始结束时间

爱好编程进阶

Java 程序员 后端开发

为什么boolean存储需要32bit?

程序员猪小哼

java基础 底层原理

13 高可用的服务

爱好编程进阶

Java 程序员 后端开发

我推荐的Flutter项目结构

坚果

4月月更

架构实战营作业四

热猫

CentOS 7

爱好编程进阶

Java 程序员 后端开发

CGBTN2108-DAY05总结复习

爱好编程进阶

Java 程序员 后端开发

关于「应变力」这个超能力|ONES 人物

万事ONES

管理

谈谈对 Database Plus 认识与畅想

SphereEx

Apache 数据库 SphereEx ShaardingSphere

从Flutter开始聊聊跨平台移动开发框架

FinClip

怎么写帮助文档?产品人看过来

小炮

帮助中心

API 分页探讨:offset 来分页真的有效率吗?

爱好编程进阶

Java 程序员 后端开发

OpenHarmony 设备开发环境搭建 / 源码获取 / 编译 / 烧录

Anna

OpenHarmony

IntelliJ IDEA 中集成并使用 Git 图文教程

爱好编程进阶

Java 程序员 后端开发

Day06-Java代码操作阿里云oss,开发前准备,开发参考文档

爱好编程进阶

Java 程序员 后端开发

docker限制容器的cpu内存使用率

爱好编程进阶

Java 程序员 后端开发

Java8设计模式最佳实战-设计模式概述(第七天学习记录)

爱好编程进阶

Java 程序员 后端开发

大数据培训Hive架构思想与设计原理

@零度

hive 大数据开发

CDH5部署三部曲之一:准备工作

爱好编程进阶

Java 程序员 后端开发

API 文档构建工具 - Swagger2简单应用

爱好编程进阶

Java 程序员 后端开发

Day180

爱好编程进阶

Java 程序员 后端开发

influxdb基础(七)

爱好编程进阶

Java 程序员 后端开发

OpenHarmony啃论文计划-elf文件格式介绍

Anna

OpenHarmony

java培训Stream遍历树形结构案例分享

@零度

stream JAVA开发

Java EE开发系列教程 - 添加JPA模块

爱好编程进阶

Java 程序员 后端开发

编码的底层原理

程序员猪小哼

java面试 底层原理 死磕 Java 基础

Day163

爱好编程进阶

Java 程序员 后端开发

avatar Logo

爱好编程进阶

Java 程序员 后端开发

Java 输入一个字符串格式日期,获取对应的自然月开始结束时间,对应的自然年开始结束时间(1)

爱好编程进阶

Java 程序员 后端开发

2020年Java面试复盘,收获Offer,金三银四程序员面试精装版pdf,分享给跳槽面试的程序员

爱好编程进阶

Java 程序员 后端开发

2hutool源码分析:DateUtil(时间工具类)-常用的时间类型Date,DateTime

爱好编程进阶

Java 程序员 后端开发

新年里学些正则表达式吧!_语言 & 开发_Jonathan Allen_InfoQ精选文章