【问题标题】:What's a Regex pattern for 3 consecutive digits increasing or decreasing3个连续数字增加或减少的正则表达式模式是什么
【发布时间】:2010-02-02 15:23:22
【问题描述】:

我需要一个正则表达式模式来匹配字符串中连续增加或减少的 3 个连续数字的序列。

例如:

这些字符串应该匹配(xxx123xxx、789xxxxxx、xxxxxx987、xxxxxx432)

这些字符串不应匹配(xxxxxx454、333xxxxxx、xxx429xxx)

【问题讨论】:

  • 为什么需要正则表达式? (我认为大多数正则表达式方言都无法做到这一点,Perl 的条件子句可能能够做到)。最好匹配三个连续的数字,然后过滤它们之间的关系。
  • “增加或减少”使正则表达式不适合此任务
  • 这是一个每个点都需要“状态”的问题。考虑使用状态机(解析器)来解决这个问题。

标签: regex


【解决方案1】:

除了列出它们别无他法:

(012|123|234|345|456|567|678|789|987|876|765|654|543|432|321|210)

【讨论】:

  • 这在技术上是正确的答案,但我同意 Regex 不一定是完成任务的最佳方式。应该使用正则表达式来查找 3 位数模式,然后应使用进一步测试来查找该 3 位数模式是否连续增加/减少。
  • @matt.kovacs:这是一个很好的结论。
【解决方案2】:

这可以很简单地完成,但只能定义有效的连续数字集

(?:012|210|123|321|234|432|345|543|456|654|567|765|678|876|789|987)

【讨论】:

    【解决方案3】:

    这将是一个非常复杂的正则表达式。在一个我必须做非常相似的事情的项目中,我最终匹配了数字组,然后将数字的实际验证传递给了一个委托(我在 C++ 代码中这样做;在 Java 中的另一个项目中做了类似的事情同样的方式)。

    如果可能的话,我建议在这里这样做。一个可以自己完成所有这些工作的正则表达式将很难阅读或维护。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-12
      • 2014-05-20
      • 1970-01-01
      • 2012-02-11
      相关资源
      最近更新 更多