我正在尝试匹配类似于foo-bar3-vm.companyname.local. 部分foo-bar3可以是字母、数字和连字符的任意组合,但我想确保它以-vm.companyname.local.
我试图使用/^[a-zA-Z0-9\-]*[vmVM]*\.companynanme\.local$/,但这似乎与任何以.companyname.local.
我的正则表达式有什么问题?
该[vmVM]*部分意味着匹配字母 v、m、V 或 M 零次或多次,因此零次重复会给你一个以 just 结尾的字符串.companyname.local。如果您想像您的问题听起来那样严格,只需将其更改为:
/^[a-zA-Z0-9\-]*\-[vV][mM]\.companyname\.local$/
或者,如果您希望主机名中至少包含一个字母/数字,例如:
/^[a-zA-Z0-9][a-zA-Z0-9\-]*\-[vV][mM]\.companyname\.local$/
编辑:哎呀,错字。
表示“*零次或多次”,[...]表示该组中的任何字符。所以[vmVM]*表示“v、m、V 或 M 中的任何一个重复零次或多次”。
你真正想要的是:
/^[a-zA-Z0-9\-]*-vm\.companynanme\.local$/i
注意末尾的“i”表示“不区分大小写”
试试这个:
/^[a-zA-Z0-9\-]*[-]{1}[vV]{1}[mM]{1}\.companynanme\.local$/
量词将{1}确保您有一个连字符-,一个v后跟一个m。
*量词意味着您可以有零次或多次出现的表达式[]。因此,任何以结尾的内容.companyname.local都将匹配您问题中发布的正则表达式。