为什么人们捍卫正则表达式语法? [关闭]

2023-11-23

有一个类似的问题,但它只是得到了人们总是给出的关于正则表达式语法的相同旧答案,但这不是这里的重点,所以请尽量不要下意识地提出关于正则表达式语法的相同旧答案。这次尝试更加原创和个性化。

正则表达式语法非常非常紧凑,几乎太紧凑了。就像代码高尔夫一样, 每个人都同意代码高尔夫在生产代码中并不是一件好事。然而大多数人接受正则表达式语法,这似乎......至少可以说是矛盾的。

因此,现在人们可能会听到的一些常见辩护包括:

  • Answer: 很紧凑

  • Counter:在当今时代,我们不是都同意代码应该是有文化的,并且像“client”这样的变量比“c”更好吗?

  • Answer:这是一种“领域特定语言”

  • Counter:所有非常容易理解、不紧凑、不神秘并且我敢说漂亮的领域语言(例如 SQL 或 LINQ)怎么样?

  • Answer: 了解之后就很容易理解了。

  • Counter:大多数优秀的语言都很容易理解,即使您以前从未使用过它们。例如,任何人都可以轻松地使用 Python,即使他们以前从未见过它。为什么人们会为 Regex 辩护,因为它是一种很难看的语言,但随后又继续抱怨 Lisp 的括号?

好吧,现在每个人都尽量保持原创和诚实,不要只是拿出 20 年前程序员用来设计正则表达式的旧式死记硬背答案。除非你真的相信它们在当今时代是有效的主张。


Edit:根据记录,我多年前就知道 Regex,即使在今天也经常使用它们,甚至可能会理解它们。然而,我突然有一种感觉,也许是时候重新考虑我所认为的关于正则表达式的“真理”了,并从现代的角度来看待它们。主要是因为质疑原则是进一步发展所必需的,而且因为很多新人强烈抱怨它们,所以他们不能只是简单地正确,所以我决定尝试站在新人的立场上考虑一下有哪些优点反对正则表达式。

至于是主观,我不认为这比程序员笑话那些日子的事情。相反,它与程序员非常相关。

As for 争论的,这就是问题的重点。为了获得赞成和反对正则表达式过时语法的良好论据,这可以帮助新手真正理解为什么正则表达式是这样的,甚至更好地希望让一些新人提出更好的解决方案,美国老思想者看不到,因为我们被正则表达式的“酷”蒙蔽了双眼。


Quote:

Perl 5.10 文档 正则表达式已经融化成一堆 无法阅读的胡言乱语,因为有太多滑稽的内容 特性已经渗透到语法中 没有人能写出明智的文章 不再有它的文档。

您是想说正则表达式变得难以维护?那么作为优秀的程序员我们是否应该考虑重构它们呢?也许像我们对其他许多技术所做的那样进行清理和尝试?


我要说的大部分内容都是由 Adam 和 DGM 解决的,但我认为他们没有很好地阐述你的第二点。

“那些非常容易理解、不紧凑、不神秘并且我敢说像 SQL 或 LINQ 这样漂亮的领域语言怎么样?”

我认为表达这个问题的一个好方法是问,你会如何用英语来解释正则表达式?

<TAG\b[^>]*>(.*?)</TAG>

查找“”的内容,后跟“>”记住零个或多个内容,停在第一个“

这是一个相当简单的正则表达式。英文形式真的更容易理解吗?你能做得更好吗?

正则表达式很难阅读,但您想要从它们中得到什么也同样难以解释。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么人们捍卫正则表达式语法? [关闭] 的相关文章

  • 正则表达式仅匹配大写“单词”,但有一些例外

    我的技术字符串如下 The thing P1 must connect to the J236 thing in the Foo position 我想用正则表达式匹配那些仅大写的单词 即这里P1 and J236 问题是当句子的第一个字母
  • 正则表达式中的 ^.* 和 .*$ 是什么?

    谁能解释一下这些字符的含义 我查过它们 但我似乎不明白 整个正则表达式是 8 a z A Z 所以基本上是正则表达式的开始和结束字符 意思是 任何字符 意思是 任何数量的这个 因此意味着任意长度的任意字符串 表示字符串的开头 表示字符串的结
  • 正则表达式仅匹配字母数字和连字符,删除 javascript 中的其他所有内容

    我想删除除字母数字和连字符之外的所有内容 到目前为止 我已经得到了这个 但它不起作用 String String replace a zA Z0 9 ig 有什么帮助吗 如果要删除除字母数字 连字符和下划线之外的所有内容 请否定字符类 如下
  • 设计 DFA 接受可被数字“n”整除的二进制字符串

    我需要学习如何设计一个 DFA 使得给定任何数字 n 它接受二进制字符串 0 1 其十进制等效数可被 n 整除 不同的 n 会有不同的 DFA 但是有人可以给出一个基本方法 我应该遵循该方法来处理任何数字 0 下面我写了一个答案n等于 5
  • 使用正则表达式的 Strip() 函数

    我正在尝试重新创建strip 使用正则表达式的Python函数 这是最后一个练习题用 Python 自动化处理无聊的事情 https automatetheboringstuff com chapter7 这是我的代码 import re
  • 在java正则表达式中获取组名

    我正在尝试接收模式和字符串并返回组名称 gt 匹配结果的映射 Example
  • “通用”电话号码的基本正则表达式

    我需要一个正则表达式 用于 ASP NET 网站 来验证电话号码 它应该是灵活的 唯一的限制是 应至少为 9 位数字 没有字母 可以包含空格 连字符 单个 我搜索过 SO 和 Regexlib com 但我得到的表达式有更多限制 例如英国电
  • Java:正则表达式,其中每个字符出现0-1次

    Problem 匹配正则表达式的每个字符最多出现一次的单词 该单词必须具有一定的大小 例如 2 5 单词中必须有一个特定的字符 比方说字符 e 我有什么 word matches abcde 2 5 这将匹配字符 a b c d 和 e 出
  • php正则表达式删除数字

    我需要一个正则表达式来删除字符串中的数字 但不删除空格 我目前有 city location UK 0113 Leeds new york sip city 0113Leeds new york city preg replace a z
  • 从字符串中提取数字 (Regex C++)

    假设我有一根绳子S 1 this is a number 200 Val 54 4class find57 我想用Regex仅提取这些数字 num 1 1 num 2 200 num 3 54 而不是 4class 中的 4 或 find5
  • 尝试在 Linux 上使用 Clang++ 编译 c++11 正则表达式教程时出错

    我正在努力追随本教程 http solarianprogrammer com 2011 10 12 cpp 11 regex tutorial 关于 C 11 中的正则表达式 当我尝试编译这个小代码示例时 我收到这些错误 clang std
  • 正则表达式删除块注释也删除 * 选择器

    我正在尝试使用 bash 从 css 文件中删除所有块注释 我有以下 sed 命令的正则表达式 sed r s w s w d 这可以很好地去除块注释 例如 This is a comment this is another comment
  • 仅在大括号外的空格上分割字符串

    我是正则表达式新手 我需要一些帮助 我阅读了一些与此问题类似的主题 但我不知道如何解决它 我需要在不在一对大括号内的每个空格上分割一个字符串 大括号外的连续空格应被视为单个空格 TEST test test test test test t
  • 如何使用正则表达式匹配模式的最后一次出现

    我有一个像这样的字符串 token1 token2 我要匹配 token2 使用正则表达式 它应该匹配的其他可能的情况是 token1 应该匹配 最后一个 token1 应该匹配 最后一个 token1 token2应该匹配 token2
  • 在Python中检测re(regexp)对象

    我想知道什么是正确的 pythonic 向后和向前兼容的方法如何检查对象是否已编译re object isinstance方法不能轻易使用 而生成的对象声称是 sre SRE Pattern object gt gt gt import r
  • 正则表达式匹配整个单词[重复]

    这个问题在这里已经有答案了 我在 stackoverflow 上看到了很多关于使用正则表达式进行全词匹配的例子 我有以下情况 我想用 www xyz com 替换 www abc com string RetVal I am going t
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • 如何仅删除单括号并保留配对的括号

    你好 我亲爱的老师 R 用户朋友们 我最近开始认真学习正则表达式 最近我遇到了一种情况 我们只想保留配对括号 并省略未配对的 这是我的样本数据 structure list t1 c Book Pg 1 Website Online Jou
  • 使用基于正则表达式的部分匹配来选择 Pandas 数据帧的子数据帧

    我有一个 Pandas 数据框 它有两列 一列 进程参数 列 包含字符串 另一列 值 列 包含相应的浮点值 我需要过滤出部分匹配列 过程参数 中的一组键的子数据帧 并提取与这些键匹配的数据帧的两列 df pd DataFrame Proce

随机推荐

  • document.all 和 document.layers 现在已过时

    我正在使用一些 旧的 本机 javascript 并且遇到了 document getElementById document all 和 document layers 的分离 据我所知 document all 和 document l
  • Android 多个同步适配器项目(例如 Google 帐户)?

    我目前已将 Android 应用程序设置为使用 Android 的 AccountManager 功能 使用 SyncAdapter 和经过身份验证的帐户自动执行同步 我只运行 1 个同步适配器 用于同步所有内容 但我想将其分开 以便以不同
  • scala 中的 MinMax 归一化

    我有一个包含多列的 org apache spark sql DataFrame 我想使用 MinMax 归一化或任何技术来缩放 1 列 lat long dist 以在 1 和 1 之间缩放数据并将数据类型保留为 org apache s
  • 不明确的 if 和 else 分支:行为是否已定义?

    我最近遇到了一些 C 代码 如下所示 if test 1 if test 2 Do stuff else exit 0 这是不明确的 因为编译器可以将其视为 if test 1 if test 2 else or as if test 1
  • 查找数组中元素的最大总和的算法,使得相邻元素不超过 k 个

    我遇到了这个问题 给定一个仅包含正值的数组 您希望在没有超过 k 个选定元素的组是相邻的约束下最大化选定元素的总和 例如 如果输入为 1 2 3 1 7 9 n 6 且 k 2 输出将为 21 来自选择元素 2 3 7 9 我的简单 DP
  • 执行大查询时内存不足?

    我在尝试进行大查询时收到此错误 java lang OutOfMemoryError Java heap space 我搜索过并发现申请设置自动提交 假 and 设置获取大小我准备好的语句的方法可能有助于处理大查询 然而 当我使用它时 我收
  • 将长sql vba语句分成多行

    我对 VBA 环境完全陌生 我试图将这一行分成多行 但失败了 有人可以帮我把这段代码分成多行吗 DoCmd RunSQL UPDATE INDIVIDUAL SET INDIVIDUAL INDI FIRSTNAME prospect co
  • Ruby 在 Windows 上崩溃

    我面临着这里描述的同样的问题 为什么 ruby exe 遇到了问题并且需要关闭 rails 失败 那是 ruby 崩溃并出现以下错误 ruby exe has encountered a problem and needs to close
  • 不是有效 python 标识符的属性

    通常的属性访问方法要求属性名称是有效的 python 标识符 但属性不必是有效的 python 标识符 gt gt gt class Thing def init self setattr self 0potato 123 gt gt gt
  • 更改表并添加 UNIQUE 键会导致错误

    我有一张桌子叫Animal AnimalId是主键 我想设置该列AnimalType id作为独特的 我有一个AnimalType表并需要在此处设置外键 ALTER TABLE Animal ADD UNIQUE Animal Animal
  • 在 WebAPI 方法中返回 HTTP 403

    我如何返回HTTP 403 from a WebAPI方法 我试过扔一个HttpResponseException with HttpStatusCode Forbidden 我已经尝试过 return request CreateErro
  • 使用奥格登引理与常规泵引理进行上下文无关语法

    我正在学习问题中引理之间的区别 我能找到的每个参考文献都使用以下示例 a i b j c k d l i 0 or j k l 以显示两者之间的差异 我可以找到一个使用常规引理来 反驳 它的例子 选择 w uvxyz s t 维 gt 0
  • ECMAScript 3 在主要浏览器中的实现仍然存在差异吗?

    有人可以指出 ECMAScript 第三版在当今浏览器中的实现差异吗 Chrome Safari IE8 FF 使用 ECMAScript 3 标准 而不是 FF 和 IE 对 JScript 和 JavaScript 的扩展 时我们安全吗
  • C 生成不重复的随机数[重复]

    这个问题在这里已经有答案了 我想生成 1 到 13 之间的随机数而不重复 我用了这个方法 但是并不能保证没有信誉 for i 0 i lt 13 i array i 1 rand 13 请帮我 C语言 正如评论所说 Fill an arra
  • Android 单选按钮取消选中

    该应用程序是一个步进音序器应用程序 具有 16 个无线电组 每组有 8 个按钮 它工作得很好 除非一个组选择了一个按钮 否则我无法将其关闭 除非我使用我创建的清除按钮来清除所有无线电组 我想添加的是一些代码 它表示当再次选择选定的单选按钮时
  • 如何为 iOS 构建 OpenCV 2.4.9?

    我正在关注这些指示属于 openCV 文档 但它们确实已经过时了 提到了 iOS4 或 iOS5 XCode 4 2 安装在 Developer 中 等等 它没有构建 并且我有各种错误 所有初始测试均失败 Performing Test H
  • Angular JS 生成 PDF - 有创建者 - 制作者模块吗?

    正如标题所说 Angular 有 PDF 创建器 生成器吗 我见过https github com MrRio jsPDF 但找不到 Angular 的任何内容 我想将 html 页面制作为 pdf 文件以供下载 您可以将您提到的 Java
  • 无法在我的 C# 应用程序中添加静态端口映射

    我正在尝试在我的 C 应用程序中添加新的静态端口映射 因为我的应用程序作为服务器运行 并且我希望它侦听端口 8000 NATUPNPLib UPnPNATClass upnpnat new NATUPNPLib UPnPNATClass N
  • git:提交多个文件但添加消息

    我的存储库中有大量文件 有时我处理 20 个文件 并且想提交所有文件 但是 我想为每个添加一条消息 如何添加所有已更新的文件并为每个文件添加一条消息 而无需手动为每个文件运行命令 是否可以进行批量运行并提示我为每个运行添加一条消息 注意 您
  • 为什么人们捍卫正则表达式语法? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 有一个类似的问题 但它只是得到了人们总是给出的关于正则表达式语法的相同旧答案 但这不是这里的重点 所以请尽量不要下意识地提出关于正则表达式语法的相同旧答案 这次尝试更加原创和个性化 正则表