主机名的正则表达式

时间:2010-09-16 00:43:06

标签: regex syntax hostname

我正在尝试匹配类似于foo-bar3-vm.companyname.local的主机名。 foo-bar3部分可以是字母,数字和连字符的任意组合,但我希望确保它以-vm.companyname.local结尾。

我试图使用/^[a-zA-Z0-9\-]*[vmVM]*\.companynanme\.local$/,但这似乎与.companyname.local中的任何内容相匹配。

我的正则表达式出了什么问题?

3 个答案:

答案 0 :(得分:2)

[vmVM]*部分表示匹配字母v,m,V或M零次或多次,因此零次重复会为您提供仅以.companyname.local结尾的字符串。如果你想要像你的问题那样具有限制性,那么只需将其改为:

/^[a-zA-Z0-9\-]*\-[vV][mM]\.companyname\.local$/

或者,如果您希望主机名中至少有一个字母/数字,请执行以下操作:

/^[a-zA-Z0-9][a-zA-Z0-9\-]*\-[vV][mM]\.companyname\.local$/

编辑:哎呀,错字。

答案 1 :(得分:1)

*表示“零次或多次”,[...]表示此组中的任何字符。因此[vmVM]*表示“v,m,V或M中的任何一个重复零次或多次”。

你真正想要的是:

/^[a-zA-Z0-9\-]*-vm\.companynanme\.local$/i

注意末尾的“i”表示“不区分大小写”

答案 2 :(得分:-1)

试试这个:

/^[a-zA-Z0-9\-]*[-]{1}[vV]{1}[mM]{1}\.companynanme\.local$/

{1}量词将确保您有一个连字符-,一个v后跟一个m

*量词意味着您可以出现零个或多个[]表达式。因此,以.companyname.local结尾的任何内容都将与您问题中发布的正则表达式匹配。