正则表达式地狱

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

实际引用:“他们花了很多时间维护正则表达式。那么,正则表达式地狱的替代方案是什么?”

正则表达式地狱?是一回事?

我有几个想法:

  1. 你有支持“很多”的指标吗?我对此表示怀疑。很难将 RE 维护与代码维护分开。除非你有 RE 专家。也许有一个与 DBA 组织类似的 RE 组织。 DBA 编写SQL。 RE 专家撰写 RE。如果那是真的,我可以看到你会有指标,并且可以证明“很多”。否则,我怀疑这是夸张的。有挫败感,真的。
  2. RE 对编程至关重要。很难表达它们的重要性。我建议那些在 RE 方面有严重问题的程序员在工艺的其他方面也有严重问题,并且可能需要在 RE(和其他方面)方面进行补救培训。接受一些培训并不丢人。有很多书可以提供帮助。声称没有时间进行培训(或没有预算)是创建 RE Hell 的初衷。这是一个需要解决的小问题。你可以花 16 个小时四处摸索,或者停止摸索,花 16 个小时学习,然后继续学习新技能。这是你的选择。
  3. RE 只是传统集合论的一种变体。他们一点都不难。集合论对编程至关重要,RE 也是如此。它和布尔代数一样基础。它与让循环正确终止一样基本。它与从终端窗口复制和粘贴一样基本。
  4. RE 是通用的,因为它们比任何其他技术都能更好地解决许多问题。强调优于任何替代方案。 RE 融入了 awk 和 perl 等语言的语法中。它们是通用的,因为从来没有人构建过合理的替代方案。如果您想了解更多内置正则表达式的优势,请学习 SNOBOL4

RE 是必不可少的。未能掌握 RE 意味着未能学习基础知识。

RE 地狱就像布尔代数地狱。这就像集合论地狱。这就像数学图书馆地狱。这就像未初始化的变量地狱。这些是你通过一种有意的无知创造出来的东西。

我很抱歉听起来很刺耳。但我没有同情心。

有问题的初始正则表达式? r"[\( | \$ | \/ |]"。这表明对基础知识缺乏一定的了解。看起来它以 r"\(|\$|/" 开头,有人在空格中输入(也许他们打算在编译时使用详细选项)和/或将整个包裹在 [] 中。在尝试 [] 之后,它似乎可以工作,他们称之为完成。

该电子邮件询问(有点琐碎)最后一个管道是否真的是无关紧要的。嗯。是的。但。

跟进

困难的部分是(1)试图弄清楚问题到底是什么。为什么他们只删除最后一个竖线字符?他们想做什么?目标是什么?然后(2)试图弄清楚需要多少教程背景才能成功回答真正被问到的任何问题。 r[\(\$/]" 的响应似乎实际上可能没有 帮助 。扮演发出神秘答案的神奇神谕只会使混乱的统治状态永久化。

后续的澄清请求导致 (1) 一份详尽的清单,列出了似乎提到正则表达式的每本书,(2) 一个远高于正则表达式问题上下文的用户故事。当没有焦点时,很难提供帮助。每本书。 “数据”的广义“匹配”。

Python连接?也不能完全解析出来,这似乎是 ETL 管道的一部分。我不能确定,因为最初的用户故事毫无意义。

尝试讨论所提供的关于“匹配”和“数据”的用户故事——可以预见——毫无结果。它停在“一些问题......不仅仅是拼写错误和拼写错误。”等待。什么?那他们是什么?如果它们不是拼写错误,那它们是什么?欺诈罪?黑客攻击?通过在某些匹配算法中占用时间来进行拒绝服务攻击?

这是一个拼写错误。不可能是别的。以其他方式结束对话是一种奇怪且弄巧成拙的重新设计软件的方法。

更多后续

在这一点上,我们似乎正在将讨论范围缩小到“随着时间的推移,我们已经积累了很多‘标准 错误 ’。需要帮助的问题是如何管理所有代码这些‘常见错误’?”提供此问题是为了代替实际的用户故事。缺少故事可能意味着我们对实际解决数据匹配问题不感兴趣。相反,我们狭隘地专注于在正则表达式上撒上 Faerie Dust,使它们表现得更好。

他们不想要正则表达式的 替代品 ,因为问题“不仅仅是错别字和拼写错误”。他们想要没有正则表达式地狱的正则表达式。