php - 如何改进正则表达式?
问题描述
我正在尝试使用正则表达式匹配以下可能性:
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,]+(?(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,]+
模式的条件。$
- 字符串结束。
推荐阅读
- php - Macos Apache , 403 禁止
- java - 使用 Roundingparam 设置CornerRadius,视图不会抗锯齿
- ruby - 运行同步作业时拒绝访问 S3 存储桶
- postgresql - 获取索引列总大小
- python - 如何使用特定的标准偏差 python 列表理解对列表中的值进行分组
- linux - Bash:重定向来自 2 个来源的输入?
- python - Python Dash在过滤时隐藏html表格
- amazon-web-services - 开发 REST API 时处理“AWS 堆栈资源限制”的正确方法是什么?
- android - 是否可以检测三连击?
- parallel-processing - 有一组复数,如何在Fortran中做并行数值积分?