首页 > 解决方案 > 如何改进正则表达式?

问题描述

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

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

标签: phpregexpcre

解决方案


您可以使用

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

请参阅正则表达式演示

详情

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

推荐阅读