[译]一些对程序员有用的正则表达式

190 阅读2分钟

在我的博客文章《我的编程设置》中,我强调了正则表达式对我的编程活动的重要性

正则表达式看起来可能令人生畏,而且十分丑陋,但是,它们不应该被低估。

有人问我一些我所依赖的正则表达式的例子。

  1. 在代码中加入“尾随空格”, 它通常被认为是一个失礼。也就是说,您的行应该以行返回控制字符结尾,而不是以其他任何字符结尾。在正则表达式中,字符串(或行)的末尾用“ $”符号标记,空白可以用“\s”表示,一个或多个空白的序列是“\s+”。因此,如果我搜索“\s+$”我会找出所有有问题的句子
  2. 通常最好在源代码中避免使用非 ASCII 字符。实际上,在某些情况下,没有标准的方法告诉编译器您的字符编码,因此非 ascii 可能会引发问题。要检查所有非 ASCII 字符,可以这样做 [^\x00-\x7F]
  3. 有时在变量或运算符之间插入太多空格。多个空格在一行的开头是可以的,因为它们可以用于缩进,但是其他重复的空格通常是错误的。你可以用表达式来检查它们 \b\s{2,}. \b 表示单词的边界
  4. 我使用空格来缩进我的代码,但是我总是使用偶数的空格(2、4、8等)。然而,我可能会弄错,在某些地方插入奇数个空格。为了检测这些情况,我使用表达式 ^(\s\s)*\s[^\s]。要删除额外的空格,我可以选择它与前瞻断言与后瞻断言,如(?<=^(\s\s)*)\s(?=[^\s])
  5. 我不希望在开括号之后或闭括号之前有空格。我可以用(\(\s|\s\))查一下这种情况。如果我想删除这些空格,我可以用后瞻断言检测到他们,如(?<=\()\s
  6. 假设我想标识一个变量的所有实例,我可以搜索\bmyname\b. 通过使用单词边界,我确保不会捕获其他函数或变量名中的字符串实例。类似地,如果我想选择以某个表达式结尾的所有变量,我可以使用类似于\b\w*myname\b 的表达

正则表达式的伟大之处在于它们的广泛适用性。

我的许多示例都与代码重新格式化有关。有些人想知道为什么我不简单地使用代码重新格式化程序。我确实一直在使用这些工具,但它们并不总是一个好的选择。如果您要与其他对代码格式有其他偏好的人一起工作,您不希望仅仅为了贡献一个新函数而触发数百个格式更改。这样做是非常失礼的。因此,您经常需要检查您的格式重新设置。

原文地址:lemire.me/blog/2021/0…