我需要编写一个具有以下规则的正则表达式:
一些有效示例是:
这些示例无效:
12--11(因为它包含两个连字符)
1-2345(因为它包含5号)
我写的RegEx是:
^[1-4]-[1-4]{4}|^[1-4]{2}-[1-4]{3}|^[1-4]{3}-[1-4]{2}|^[1-4]{4}-[1-4]
然而,这似乎不起作用,并且它不会处理最终存在单个字符的情况。
有些人可以帮我确定处理方法吗?
<> 字符出现在最后一个位置然后在字符之前我们必须有一个数字而不是炒作。
即11-a(必须失败) 11-1a(必须通过)
答案 0 :(得分:3)
^(?!(?:[^-\n]*-){2})(?:[1-4-]{1,5}[1-4]|[1-4-]{1,5}[a-zA-Z])$
您可以使用lookahead
处理该问题。请参阅演示。
答案 1 :(得分:1)
如果您有这么复杂的要求,那么使用lookarrounds来形成and
- 同时匹配每个条件的模式总是 easy 。有时你需要将一个条件分成两个:
^.{1,6}$
1-4
和连字符和字母:^[1-4a-z\-]+$
(不准确,需要下一行)^[1-4\-]{1,5}[1-4a-z]$
^[^-]*-[^-]+$
将所有内容放在一起导致:
(?=^[1-4\-]{1,5}[1-4a-z]$)(?=^[^-]*-[^-]*$)(?=^[1-4a-z\-]+$)^.{1,6}$