我正在尝试匹配类似于foo-bar3-vm.companyname.local
的主机名。 foo-bar3
部分可以是字母,数字和连字符的任意组合,但我希望确保它以-vm.companyname.local
结尾。
我试图使用/^[a-zA-Z0-9\-]*[vmVM]*\.companynanme\.local$/
,但这似乎与.companyname.local
中的任何内容相匹配。
我的正则表达式出了什么问题?
答案 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
结尾的任何内容都将与您问题中发布的正则表达式匹配。