0

我正在尝试匹配类似于foo-bar3-vm.companyname.local. 部分foo-bar3可以是字母、数字和连字符的任意组合,但我想确保它以-vm.companyname.local.

我试图使用/^[a-zA-Z0-9\-]*[vmVM]*\.companynanme\.local$/,但这似乎与任何以.companyname.local.

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

4

3 回答 3

2

[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$/

编辑:哎呀,错字。

于 2010-09-16T00:49:47.963 回答
1

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

你真正想要的是:

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

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

于 2010-09-16T00:50:08.113 回答
-1

试试这个:

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

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

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

于 2010-09-16T00:48:37.257 回答