使用可变数量的字母数字字符(用破折号分隔)简化正则表达式

时间:2018-11-12 08:03:31

标签: regex

我想验证特定的字符串是否正确。正确的字符串如下所示:

ab1-peter-application

字符串的规则为<1-4 alphanumeric characters>-<1-30 alphanumeric characters>-<1-30 alphanumeric characters>

我只是按照以下方式构建正则表达式,所以我认为它可以工作:

[a-zA-Z0-9]{1,4}[-]{1}[a-zA-Z0-9]{1,30}[-]{1}[a-zA-Z0-9]{1,30}

由于每个段似乎都是相同的,并且字母数字字符的出现也有所不同,我觉得可以缩短它。有没有机会缩短/简化此正则表达式?

2 个答案:

答案 0 :(得分:2)

您可以结合最后两个部分:

-<1-30 alphanumeric characters>-<1-30 alphanumeric characters>

分组,重复两次。此外,字符集中的单个字符是多余的-在这种情况下,可以完全删除字符集,以使正则表达式更加简洁。 {1}(无意义的量词)也是如此:

[a-zA-Z0-9]{1,4}(?:-[a-zA-Z0-9]{1,30}){2}

此外,如果环境允许,请使用不区分大小写的标志(这样就不必重复a-zA-Z),还可以使用\d来代表数字而不是0-9

[a-z\d]{1,4}(?:-[a-z\d]{1,30}){2}

答案 1 :(得分:-1)

[a-zA-Z0-9] {4}(-[a-zA-Z0-9] {30}){2} $-简单的正则表达式以匹配 exact 长度要求的字符串

^ [a-zA-Z0-9] {1,4}(-[a-zA-Z0-9] {1,30}){2} $-简单的正则表达式以匹配变量所需长度

希望这会有所帮助