【发布时间】:2015-12-23 16:32:39
【问题描述】:
我正在尝试创建一个与以下正则表达式匹配的正则表达式 (Java/JavaScript),但前提是总共少于 13 个字符(并且至少为 4 个)。
(COT|MED)[ABCD]?-?[0-9]{1,4}(([JK]+[0-9]*)|(\DDD)?) ← 最初发布
(COT|MED)[ABCD]?-?[0-9]{1,4}(([JK]+[0-9]*)|(\ [A-Z]+)?)
这些值应该(并且确实)匹配:
MED-123
COTA-1224
MED4
COTB-892K777
MED-33 DDD
MED-234J5678
此值匹配,但我不希望它匹配(我只想匹配总共少于 12 个字符):
COT-1111J11111111111111
见http://regexr.com/3bs7bhttp://regexr.com/3bsfv
我尝试将我的表达式分组并将{4,12} 放在最后,但这只会使其查找整个表达式匹配的 4 到 12 个实例。
我觉得我错过了一些简单的东西......提前感谢您的帮助!
【问题讨论】:
-
试试
(COT|MED)[ABCD]?-?[0-9]{1,4}(([JK]+[0-9]{1,4})|( DDD)?)\b。见demo。 -
这可能是在这种情况下,尝试过多地投入正则表达式是不值得的。为什么不只做正则表达式,然后如果你得到一个匹配,采取第二步检查匹配序列的长度(
matcher.group(0).length() < 12在Java中,类似在js中)? -
@stribizhev 您的第二条评论(否定前瞻)按预期工作-就像接受的答案一样-您应该将此作为答案而不是评论!
-
@yshavit 不幸的是,多合一正则表达式是我唯一可用的选项,否则,正如您所建议的,只检查匹配的长度肯定会容易得多
标签: javascript java regex