2010-09-16 4 views
0

Я пытаюсь сопоставить имя хоста, подобное foo-bar3-vm.companyname.local. Часть foo-bar3 может быть любой комбинацией букв, цифр и дефис, но я хочу, чтобы она заканчивалась на -vm.companyname.local.Регулярное выражение для имени хоста

Я пытался использовать /^[a-zA-Z0-9\-]*[vmVM]*\.companynanme\.local$/, но это похоже на то, что заканчивается на .companyname.local.

Что не так с моим регулярным выражением?

ответ

2

[vmVM]* часть означает матч буква v, м, V или M ноль или более раз, поэтому ноль повторения дадут вам строку, заканчивающуюся только .companyname.local. Если вы хотите, чтобы быть столь же ограничения, как ваш вопрос делает звук, просто изменить его на что-то вроде:

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

Или, если вы хотите по крайней мере один буква/цифра в имени хоста, что-то вроде:

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

Edit: Упс, опечатка.

+0

Удивительно, спасибо. – avaleske

-1

Попробуйте это:

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

{1} квантор будет гарантировать, что у вас есть дефис -, один v следуют один m.

Калькулятор * означает, что вы можете иметь ноль или более вхождений выражения []. Следовательно, все, что заканчивается .companyname.local, будет соответствовать регулярному выражению, опубликованному в вашем вопросе.

+0

Квантификатор '{1}' для любого регулярного выражения атома является избыточным. – msw

+0

Я знаю, что это немного поздно, но я чувствую, что предыдущий комментатор не сказал этого достаточно строго: ** '{1}' абсолютно не действует. ** '[-] {1} [vV] {1} [mM] {1} 'точно так же, как' [-] [vV] [mM] '. –

1

* означает «ноль или больше», а [...] означает любой символ из этой группы. Таким образом, [vmVM]* означает «любой из v, m, V или M, повторяющийся ноль или более раз».

То, что вы на самом деле хотите это:

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

Обратите внимание на «я» в конце означает, что «дело нечувствительным»

Смежные вопросы