【问题标题】:To match any number greater than 15 using regexp使用正则表达式匹配任何大于 15 的数字
【发布时间】:2018-10-08 10:48:09
【问题描述】:

我尝试使用以下正则表达式匹配任何大于 15 的数字:

0*[1-9][6-9][0-9]*

但我只能匹配 2 位数字,例如。我可以成功取消匹配 1213 (小于 15) ,而我无法匹配 105124 等。

谁能帮我解决这个问题。

【问题讨论】:

  • 0*[1-9]([6-9]|[0-9][0-9])[0-9]*
  • ^[1-9]{3,}|1[6-9]|[2-9][0-9]$ 工作正常
  • 谢谢paj28,它解决了我的问题
  • 正是@cmbuckley 为什么在转换为 int + 比较时使用正则表达式将使代码保持可维护性和可读性

标签: regex regex-group regex-greedy


【解决方案1】:

任何大于 15 的数都是

  • 任何 3 位或更多位的数字,前导 0 可能是 0

  • 第一个数字在字符类 [2-9] 中的任何 2 位数字

  • 第一个数字为 1,第二个数字在字符类 [6-9] 中的任何 2 位数字

从这三个规则我们可以构建正则表达式,假设我们匹配的内容只包含数字

/^0*(?:[1-9][0-9]{2,}|[2-9][0-9]|1[6-9])$/

如果您不能使用扩展的正则表达式,那么以下应该可以工作

/^0*[1-9][0-9][0-9][0-9]*|0*[2-9][0-9]|0*1[6-9]$/

【讨论】:

  • 这假定扩展正则表达式,即-r 选项与sed-E 选项与grep
  • 这应该可以正常工作^[1-9]{3,}|1[6-9]|[2-9][0-9]$
  • 这与 100 不匹配
  • 在开头添加0*以匹配任何前导0
  • 好吧,正则表达式可能不适合那个目的:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-21
  • 1970-01-01
  • 2017-05-15
  • 1970-01-01
  • 2012-08-22
  • 2020-06-01
  • 1970-01-01
相关资源
最近更新 更多