首页 > 解决方案 > 正则表达式限制字符长度而不匹配字符串的最后一个字符

问题描述

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

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

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

我希望 a123456789012345678911234 的输出已经正确。我希望这个输出应该是不正确的 a12345678901234567891123-

标签: regex

解决方案


您可以使用

^[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] - 一个字母或数字
  • $- 字符串结束。

推荐阅读