我正在尝试匹配类似于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
都将匹配您问题中发布的正则表达式。