我正在使用新的正则表达式来为虚拟机上的主机名做准备,但是,在确保最后一个字符不是点或点的同时如何限制字符长度为24时,我遇到了问题减号(第一个字符必须是字母字符)
我已经确保第一个字符是字母。第二组字符长度为23,[a-zA-z0-9]
包括点和减号。我还尝试了.+(?<!-|\.)$
的负向后看,但不起作用。
^[a-zA-Z]([a-zA-Z0-9-.]{0,23}
我希望a123456789012345678911234的输出已经正确。 我希望此输出不正确a12345678901234567891123-
答案 0 :(得分:1)
您可以使用
^[a-zA-Z](?:[a-zA-Z0-9.-]{0,22}[a-zA-Z0-9])?$
详细信息
^
-字符串的开头[a-zA-Z]
-一封信(?:[a-zA-Z0-9.-]{0,22}[a-zA-Z0-9])?
-可选序列:
[a-zA-Z0-9.-]{0,22}
-0到22个字母,数字,.
或-
个字符[a-zA-Z0-9]
-字母或数字$
-字符串的结尾。答案 1 :(得分:1)
lookahead是否有效?
^(?![\d.-])[a-zA-Z\d.-]{0,23}[a-zA-Z\d]$
^(?![\d.-])
如果下一个字符不是数字,破折号或句点,请在开始时检查s。$
的{{1}}端需要一个[a-zA-Z\d]
,中间最多23个[a-zA-Z\d.-]
答案 2 :(得分:0)
为了限制字符数,必须将表达式用^和$括起来,以表示开头和结尾。
^[a-zA-Z][a-zA-Z0-9.-]{0,22}[a-zA-Z0-9]$
[]定义括号中的一个字符 {a,b}定义示例中从0到22的前一个字符的出现次数 总共2到24个字符
可以将其保存得更短,但是这样最容易理解。