只有当表达式匹配长度不超过12个字符时,Regex才进行匹配
Regex to match only when expression match is no more than 12 characters long
我试图创建一个正则表达式(Java/JavaScript),匹配以下regex,但只有当有少于13个字符总数(和至少4)。
<罢工>(地中海床|)(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/3bs7b http://regexr.com/3bsfv
我已经尝试将我的表达式分组并将{4,12}
放在最后,但这只是使它寻找整个表达式匹配的4到12个实例。
我觉得我错过了一些简单的东西…提前感谢您的帮助!
你可以使用否定的forward:
(?!.{13,})(COT|MED)[ABCD]?-?[0-9]{1,4}(([JK]+[0-9]*)|(' DDD)?)
由于表达式已经确保匹配以COT或MED开始,并且在此之后至少有一个数字,因此它已经保证至少有4个字符
我试过把我的表达式分组,并把{4,12}放在最后,但是这只会让它查找整个表达式的4到12个实例匹配。
查找整个表达式的4到12个实例,因为您没有添加单词边界'b。你的正则表达式工作得很好,只要添加一个单词边界,你想要的结果就会实现。看一下这个DEMO。
你的正则表达式看起来很笨拙,看起来有点难读。它也非常局限于某些字符,例如JK
,除非你想这样做。对于更一般的模式,您可以查看
(COT|MED)[AB]?-?['dJK]{1,8}('s+D{1,3})?'b
(COT|MED):
匹配COT
或MED
[AB]?:
匹配A或B,这是可选的,因为?
-?:
匹配-
,这也是可选的
['dJK]{1,8}:
匹配长度至少为1个字符,最多8个字符的number
、J
或K
。
('s+D{1,3})?:
匹配空格或D至少一次,最多3次,这是可选的
'b:
关于你的问题,这似乎是最重要的,它为已经匹配的单词创建了一个边界。这意味着任何超出匹配模式的内容都不会被捕获。
请看这里的demo DEMO2
你要找的答案是
(?!'S{13})(?:COT|MED)[ABCD]?-?'d{1,4}(?:[JK]+'d*|(?: [A-Z]+)?)
参见regex demo
请注意,如果一个短语不是一个完整的字符串,或者里面有空格,那么检查它的长度几乎是不可能的,因为边界有点"模糊"。因此,(?!'S{13})
是一种解决方法,它只是确保您没有一个长度为13个字符或更长且没有空格的字符串。
正则表达式分解:
-
(?!'S{13})
-检查后面的子字符串是否不包含13个非空白字符 -
(?:COT|MED) - Any of the values in the alternation (
cotor
med ') -
[ABCD]?-?
-可选A
,B
,C
,D
然后可选-
-
'd{1,4}
- 1 ~ 4位 -
(?:[JK]+'d*|(?: [A-Z]+)?)
-一组2个备选方案:-
[JK]+'d*
-J
或K
, 1次或以上,然后0位或以上 -
(?: [A-Z]+)?
-可选空格和1个或多个拉丁大写字母
-
根据这个答案,你可以这样解决这个问题:
(?=(COT|MED)[ABCD]?-?[0-9]{1,4}(([JK]+[0-9]*)|(' DDD)?))(?={4 , 12})
- Regex匹配除“”之外的所有字符;.js”;
- regex/ng模式接受某些字符
- Regex测试特殊字符
- jQuery-Regex以防止任何特殊字符
- RegEx只获取特殊字符,前后不获取任何字符
- Regex-从字符第N次出现到字符串末尾的匹配
- Javascript Regex选择每个非字母数字字符和空白
- 为什么regex只验证字段中的一个字符,而不是所有输入的字符
- Regex查找前面没有特定字符的字符
- Regex:允许除某些选定字符之外的所有字符
- regex中连字符的这种用法有效吗
- Javascript和RegEx用于删除特殊字符
- JavaScript Unicode Regex - 字符类中的顺序范围
- REGEX (javascript) - 允许字母数字字符中的特殊字符不在第一个位置
- Javascript-使用Regex获取两个字符之间的字符
- regex,用于修改单词末尾特定大小写的字符
- 用空格替换regex字符
- 取消JavaScript中RegEx字符的标题
- Regex字符计数,但有些计数为3
- RegEx字符限制