QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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

  • 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:063174
用户头像

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

关注

评论

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

嘉为蓝鲸IT服务管理解决方案入选2022广东省政务服务创新解决方案

嘉为蓝鲸

自动化运维 嘉为蓝鲸 IT服务管理中心

在可观测性的启蒙与初试探--快速实现根因分析/业务大盘

Yestodorrow

架构 监控 可观测性

人人都在聊的云原生数据库Serverless到底是什么?

华为云开发者联盟

数据库 Serverless 云原生 华为云 GaussDB

30+亮眼指标,看看2022年嘉为蓝鲸的逆势创新之路!

嘉为蓝鲸

自动化运维 嘉为蓝鲸 2022大事件

软件测试/测试开发 | 接口自动化测试中,文件上传该如何测试?

测试人

软件测试 自动化测试 接口测试 测试开发 文件上传

Redis缓存的主要异常及解决方案

京东科技开发者

数据库 缓存 缓存击穿 Redis 数据结构 企业号 1 月 PK 榜

NFT元宇宙链游游戏项目系统开发技术解析(Demo)

I8O28578624

佛萨奇2.0系统开发解析逻辑教程方案(成熟技术)

I8O28578624

比Postman更懂中国程序员,Apipost真香!

不想敲代码

接口测试 API 研发管理工具

C++命名空间:别再因为命名冲突而烦恼了。

子夜的星

c++ 命名空间 C++基础

高效学 C++|继承与组合

TiAmo

c++ 编程语言 继承

什么是NFT链游项目游戏系统开发技术(Demo)采用Solidity 智能合约系统开发方案

I8O28578624

智能合约DAPP项目系统开发技术逻辑(dEOM)

I8O28578624

流程的价值一,固化业务的最佳实践!

CTO技术共享

MySQL 主从备份实践

lambochen

Pipy 0.90.0 发布

Flomesh

多线程并发 Pipy 流量管理

浅谈区块链项目开发技术(Solidity成熟语言)

I8O28578624

DAPP/去中心化系统开发流程解析方案(成熟理念)分析结果

I8O28578624

编译期多态

SkyFire

c++ 多态

小令动态丨令牌云获中国金融科技·最佳新锐企业奖

令牌云数字身份

创新大赛 金融科技创新

深入理解跨域和最佳实践分享

Crazy Urus

面试 前端 HTTP 跨域

栉风沐雨 韧性前行 | 2022年九科大事件

九科Ninetech

RPA 超自动化 流程挖掘

CleanMyMac4.12.4最新版本有哪些新功能?

茶色酒

CleanMyMac CleanMyMac X2023

C++缺省参数:学习成为一名优秀的舔狗

子夜的星

c++ 缺省参数 编程语言、 基础语法

一个小故事带你了解 Spring IoC

lambochen

【译】5 Different Ways to Create Objects in Java

lambochen

Java踩坑之三目运算符类型转换

lambochen

流程的作用是服务于业务,所有不能被用来帮业务部门好好打粮食的流程,都不是好流程!

CTO技术共享

如何让Java编译器帮你写代码

京东科技开发者

后端 编译器 java; 编译器原理 企业号 1 月 PK 榜

浅谈 Java 多版本发布

lambochen

Mockito 助你实现真正的单元测试

lambochen

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