【问题标题】:How to improve the regex?如何改进正则表达式?
【发布时间】:2021-01-21 17:02:23
【问题描述】:

我正在尝试用正则表达式匹配以下可能性:

MORE THAN CAD 10,000
MORE THAN CAD 10,000 BUT LESS THAN CAD 15,000
LESS THAN CAD 10,000

我的正则表达式适用于/^(((MORE|LESS) THAN CAD [\d,]+)|(MORE THAN CAD [\d,]+ BUT LESS THAN CAD [\d,]+))$/,但我想知道是否有更优雅的方式。

我已经尝试过/^(MORE THAN CAD [\d,]+)?(( BUT )?LESS THAN CAD [\d,]+)?$/,但它也让以下内容通过:

MORE THAN CAD 10,000LESS THAN CAD 15,000

【问题讨论】:

  • 喜欢^(?:MORE|LESS) THAN CAD \d[\d,]*(?: BUT LESS THAN CAD \d[\d,]*)?$?使用可选组?
  • @WiktorStribiżew 但这将允许LESS THAN CAD 10,000 BUT LESS THAN CAD 10,000 通过。
  • 编程语言是什么?如果支持条件,你可以使用^(?:(MORE)|LESS) THAN CAD [\d,]+(?(1)(?: BUT LESS THAN CAD [\d,]+)?)$
  • 下巴,是PHP中的PCRE吗?
  • 是的,它是 PHP 中的 PCRE @WiktorStribiżew

标签: php regex pcre


【解决方案1】:

你可以使用

^(?:(MORE)|LESS) THAN CAD [\d,]+(?(1)(?: BUT LESS THAN CAD [\d,]+)?)$

请参阅regex demo

详情

  • ^ - 字符串开头
  • (?:(MORE)|LESS) - 匹配 MORE(在第 1 组中捕获)或 LESS 的非捕获组
  • THAN CAD - 文字字符串
  • [\d,]+ - 一位或多位数字或逗号
  • (?(1)(?: BUT LESS THAN CAD [\d,]+)?) - 如果第 1 组匹配,则允许匹配可选的 BUT LESS THAN CAD [\d,]+ 模式的条件。
  • $ - 字符串结束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多