我需要编写一个具有以下规则的正则表达式:
- 1 到 4 之间的数字
- 连字符(只有一个,可以出现在任何位置)
- 文本长度必须小于或等于 6(包括潜在的连字符)
- 可以以字母或数字结尾,但不能以连字符结尾。
一些有效示例是:
- 1-3411
- 12-413
- 123-2A
- 11-1
这些示例无效:
12--11(因为它包含两个连字符)
1-2345(因为它包含数字 5)
- 11-2311(因为长度超过 6)
我编写的正则表达式是:
^[1-4]-[1-4]{4}|^[1-4]{2}-[1-4]{3}|^[1-4]{3}-[1-4]{2}|^[1-4]{4}-[1-4]
但是,这似乎不起作用,并且它不能处理最终出现单个字符的情况。
有人可以帮我确定处理这个问题的方法吗?
<> is 字符出现在最后一个位置,那么在字符之前我们必须有一个数字而不是连字符。
即 11-a (必须失败) 11-1a(必须通过)
最佳答案
^(?!(?:[^-\n]*-){2})(?:[1-4-]{1,5}[1-4]|[1-4-]{1,5}[a-zA-Z])$
您可以使用lookahead
来处理这个问题。请参阅演示。
关于regex - 模式的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30488803/