写点什么

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

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

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

关注

评论

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

腾讯云入选 2023Gartner分布式混合基础设施魔力象限

ToB行业头条

11 月 11日,MatrixOne 社区邀请您来深圳办公室坐坐

MatrixOrigin

分布式数据库 云原生数据库 MatrixOrigin MatrixOne HTAP数据库

数电票如何管理?

用友BIP

数电票

ps2021一键换天空教程

Rose

ps2021破解版 一键换天空 ps2021下载 ps2021天空替换 Photoshop Mac破解版

火山引擎云原生存储加速实践

字节跳动云原生计算

大数据 云原生 存储

未来已来!2023 云栖大会龙蜥操作系统专场精彩回顾

OpenAnolis小助手

开源 操作系统 信通院 云栖大会 龙蜥社区

昇腾迁移丨4个TensorFlow模型训练案例解读

华为云开发者联盟

人工智能 华为云 昇腾 华为云开发者联盟

即时通讯技术文集(第22期):IM安全相关文章(Part1) [共13篇]

JackJiang

网络编程 即时通讯 IM

对话在行人|合众思壮:基于用友BIP重塑业务应用,推进业财融合

用友BIP

对话在行人 数智化领先实践

人才驱动:水泥建材企业如何实现智能化人才管理

用友BIP

人才发展

如何成为前1%的程序员

互联网工科生

程序员 提升自我

华为云云容器引擎CCE产品文档带来4个升级,降低使用难度

华为云开发者联盟

云原生 华为云 华为云开发者联盟 华为云CCE容器服

吴翰清《计算》重磅来袭,为了可计算的价值,写给所有人!

博文视点Broadview

用友携手平安银行,加速数智化司库及财资体系建设

用友BIP

全球司库

如何为Affinity Publisher或Designer创建条形码?

Rose

Affinity Publisher 条形码设计

企业制作网站时为何香港云服务器成为首选?

一只扑棱蛾子

香港云服务器

信息系统建设和企业税务管理的结合

用友BIP

税务管理

DAPP 燃烧铸币质押挖矿系统开发

l8l259l3365

调用API接口获取淘宝店铺所有商品:详细指南与代码实践

Noah

2023云栖大会龙蜥操作系统专场成功举办

开放原子开源基金会

开源 云栖大会

医共体建设进入高峰期 区域医疗平台运营管理如何破局

用友BIP

医疗平台运营

外贸独立站谷歌seo优化的8大技巧

九凌网络

Mac窗口管理软件合集|告别混乱屏幕,一切井井有条

Rose

mac窗口管理软件 Mac破解软件 苹果电脑分屏软件 Mac软件下载站

调用API接口获取淘宝商品评论:方法与实战

Noah

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