正则表达式限制字符长度,但不匹配字符串的最后一个字符

时间:2019-06-18 18:56:52

标签: regex

我正在使用新的正则表达式来为虚拟机上的主机名做准备,但是,在确保最后一个字符不是点或点的同时如何限制字符长度为24时,我遇到了问题减号(第一个字符必须是字母字符)

我已经确保第一个字符是字母。第二组字符长度为23,[a-zA-z0-9]包括点和减号。我还尝试了.+(?<!-|\.)$的负向后看,但不起作用。

^[a-zA-Z]([a-zA-Z0-9-.]{0,23}

我希望a123456789012345678911234的输出已经正确。 我希望此输出不正确a12345678901234567891123-

3 个答案:

答案 0 :(得分:1)

您可以使用

^[a-zA-Z](?:[a-zA-Z0-9.-]{0,22}[a-zA-Z0-9])?$

请参见regex demoregex graph

enter image description here

详细信息

  • ^-字符串的开头
  • [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]$

See demo at regex101

  • ^(?![\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个字符

可以将其保存得更短,但是这样最容易理解。