使用 PCRE 正则表达式匹配大多数但不是所有的一到三位数字

Matching most but not all one-to-three digit numbers with a PCRE regular expression

我需要匹配 1、2 或 3 位数字,例如 ([\d]|[\d][\d]|[\d][\d][\d])。但是我需要两个 3 位特定数字的例外情况,即 350380。是否可以创建一个正则表达式来实现我的目标?

这很简单:

  • 1 到 3 位数字:\b\d{1,3}\b(此处需要单词边界 - 否则您可能会匹配较长数字的一部分)
  • 350 和 380 除外:(?!350|380)(?!3[58]0) 如果您喜欢可读性较差的表达式 ;)

合并它们,你会得到:

\b(?!350|380)\d{1,3}\b

Demo

你可以用{MIN,MAX}说出1到3个相同的字。这简化了你的正则表达式:

/^\d{1,3}$/

另外,除非你想从像 12345 这样的字符串中匹配 123,否则你需要在前后添加一些约束,可能不是数字或 space, 逗号等。在上面的 ^$ 确保数字全部单独在一行上。

最后,最简单的方法可能是将最终结果与 350 和 380 进行比较,而不是尝试制作复杂的 RE。它将使最终代码更易于阅读和理解。