AICon 北京站 Keynote 亮点揭秘,想了解 Agent 智能体来就对了! 了解详情
写点什么

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

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

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

关注

评论

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

常考面试题之css篇

yumibgt

【OpenPyXL】对Excel单元格的操作

IT蜗壳-Tango

办公自动化 3月日更 IT蜗壳教学

来云智技术论坛,带你认识 云智一体!

百度大脑

火币矿池pro系统开发介绍案例丨火币矿池pro源码功能

系统开发咨询1357O98O718

2021最新分享字节四面成功拿Offer!

比伯

Java 编程 架构 面试 计算机

HUBDEX交易所系统开发源码案例

系统开发咨询1357O98O718

中国唯一入选 Forrester 领导者象限,阿里云 Serverless 产品能力全球第一

阿里巴巴中间件

阿里云 Serverless Forrester Wave

国内首个自主可控区块链技术发布!已在北京冷链追溯中显威

CECBC

区块链

3.1 Go语言从入门到精通:包

xcbeyond

3月日更 Go 语言

ARTS-Week-1

绝影

ARTS 打卡计划 ARTS活动

MySQL-MVCC与锁机制

insight

3月日更

Photoshop CC 2019 の 安装

空城机

PhotoShop ps p图 adobe

百位优质创作者签约计划|声网签约权益

InfoQ写作社区官方

签约计划 热门活动

【得物技术】出价组DDD分层模型总结

得物技术

技术 总结 DDD 模型 出价

寻找被遗忘的勇气(二十六)

Changing Lin

3月日更

PaddleWeekly | 飞桨开源项目每周推

百度大脑

python 国际化实践

walker12138

Python flask i18n

简单数据结构总结

我是程序员小贱

3月日更

马特系统开发流程丨马特量化机器人系统开发案例

系统开发咨询1357O98O718

百位优质创作者签约计划|InfoQ 签约权益

InfoQ写作社区官方

签约计划 热门活动

国内唯一,阿里云挺进 Forrester 全球云数据仓库卓越表现者象限

阿里云大数据AI技术

云计算 大数据 阿里云 数据仓库 Forrester Wave

微软在比特币区块链上推出身份认证平台

CECBC

比特币

Wireshark数据包分析学习笔记Day23

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

如何减少期望值差异

石云升

绩效 28天写作 职场经验 管理经验 3月日更

由浅入深了解Nirvana NAC公链的两面性NA公链

区块链第一资讯

区块链 公链 挖矿

《经济学人》2021年3月27日刊精彩文章导读及资源免费下载

wbliu85

Golang :后端开发中的万能药吗?

华为云开发者联盟

后端 开发 分布式系统 Go 语言

2020年京东161亿研发费用,钱怎么花的?

吴俊宇

投资 数字化 京东

用 19 张思维导图描述Spring Cloud的概念和主要组件,建议收藏

北游学Java

Java 面试 Spring Cloud

设计模式简介

happlyfox

学习 设计模式 3月日更

软件工程笔记:什么是软件工程

风翱

软件工程 3月日更

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