我有以下几乎所有我需要的正则表达式:
^[a-z0-9][a-z0-9][a-z0-9]{2,62}$
我需要的是支持以下规则:
每个短划线( - )字符必须紧跟在字母或数字之后;不允许连续短划线。
供参考,以下是此正则表达式必须支持的所有规则:
必须以字母或数字开头,并且只能包含字母,数字和短划线( - )字符。
每个短划线( - )字符必须紧跟在字母或数字之后;不允许连续短划线。
所有字母必须小写。
- 醇>
长度必须为3到63个字符。
答案 0 :(得分:3)
这应符合您的前三个要求:
^[a-z0-9]+(-[a-z0-9]+)*$
如果支持,最后一个要求可以通过额外的正则表达式或先行断言来满足:
^(?=.{3,63}$)[a-z0-9]+(-[a-z0-9]+)*$
答案 1 :(得分:1)
这将为您提供所需的结果
^(?-i)(?:[a-z0-9]|(?<=[0-9a-z])-(?=[0-9a-z])){3,63}$
^
匹配字符串的开头
(?-i)
不区分大小写
(?:
开始非捕获组
[a-z0-9]
匹配a-z或0-9
|
或
(?<=[0-9a-z])-(?=[0-9a-z])
匹配-
只要其前面和超过a-z或0-9
这使用了后面看并向前看
)
关闭非捕获组
{3,63}
重复3到63次
$
匹配字符串
答案 2 :(得分:0)
这似乎是你正在寻找的,除了长度:
^([a-z0-9]|[a-z0-9]-[a-z0-9])+$
你不能把长度放在那里,因为尽管长度为3,序列a-a
(允许)将被视为一次重复。
如果你可以否定比赛,那么你可以做这样的事情(添加空格和换行符以便于阅读,想想perl&#39; /x
旗帜)
# reject if...
[^a-z0-9] # any character other than a-z0-9
| (^.{64}) # has a 64th character
| (^.{0,2}$) # is 0–2 characters
| (--) # consecutive dashes
| (^-) # starts with dash
| (-$) # ends with dash
无法保证比赛的效率。