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

时间:2017-06-23 12:49:02

标签: regex numbers pcre digits

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

2 个答案:

答案 0 :(得分:4)

这很简单:

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

将它们结合起来,你就会得到:

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

Demo

答案 1 :(得分:0)

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

/^\d{1,3}$/

此外,除非您想在123之类的字符串上匹配12345,否则您希望在正面和背面添加一些约束,也许不是数字或空格,逗号,在上面,^$确保数字在一条线上都是唯一的。

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