我写Python正则表达式的时候,经常对着屏幕发愣。明明感觉自己写对了,一运行就报错。要么匹配不到东西,要么匹配出一堆乱七八糟的结果。那种挫败感,做过程序员的人都懂。
记得有次写一个爬虫脚本,要提取网页里的电话号码。我盯着十几个反斜杠和方括号,手抖得不敢敲回车。等代码写完,一跑,毛都没抓到。反复检查了半小时,最后发现少写了一个转义符号。那天加班到晚上十点,就为改这一个字符。
后来同事推荐了一个在线正则测试工具。叫regex101.com。第一次用的时候,说实话有点不信。一个网页还能比IDE好用?试了五分钟,服了。
这个工具左边写正则,右边贴测试文本。每敲一个字符,右边立刻显示匹配结果。匹配上的字符会高亮。没匹配上的,工具会告诉你哪里不对。比如我写个\d{11}想匹配手机号,右边没反应。工具下面一行小字提示我,说这个模式不能匹配换行符。我马上明白,是因为文本里电话号码后有空格。太省事了。
另一个好用的是调试功能。点一下debug按钮,工具会把我的正则表达式拆开。每一步匹配了什么,消耗了什么字符,都清清楚楚。我有个习惯,遇到复杂的匹配逻辑,先写一小段测试,在工具里验证。全没问题了,再搬到代码里。这样写出来的正则,基本一次跑通。
还有引用部分。每次写分组的时候,我总搞不清$1和\1的区别。工具旁边有个速查表,鼠标移上去就显示所有元字符的含义。看多了,慢慢就记住了。现在我写分组基本不出错。
这个工具最让我感动的地方,是它不骗人。你写得多烂,它都直接告诉你。匹配失败就是失败,不会给你模糊的反馈。不像某些编辑器,报错信息模棱两可,猜来猜去浪费时间。程序员的时间很宝贵,浪费在调试正则上太不值了。
现在写正则表达式,我离不开这个工具。打开浏览器点收藏夹,粘贴文本开始测试。确认没问题了,一键复制到代码里。整个过程不超过两分钟。再也不用为少写个反斜杠卡半天了。如果你也经常被正则折磨,建议试一下。省下的时间,干什么不好。