2015-08-12 2 views
2

В одном из моих классных классов я стараюсь с совпадением шаблонов, но без успеха.Groovy pattern maching issue

def TestMap = ['/test.domain.local/ig':'serverx'] 

nodeName = 'test.domain.local' 


for (kv in TestMap){ 
    if(nodeName != null && ("${nodeName}" =~ "${kv.key}")) { 
     println "${kv.value}"; 
    } 
} 

но как-то, если состояние неправда, и я не понимаю, почему? обратите внимание, что это не полные коды. Основное внимание здесь уделяется сопоставлению с образцом.

Заранее за вашу помощь.

ответ

1

Условное условие должно быть отменено (согласование выполняется в неправильном направлении)

def TestMap = [/test.domain.local/ig:'serverx'] 

nodeName = 'test.domain.local' 

for (kv in TestMap){ 
    if(nodeName != null && ("${nodeName}" =~ "${kv.key}")){ 
     println "${kv.value}"; 
    } 
} 
+0

Спасибо. я смотрел на http://mrhaki.blogspot.ch/2009/09/groovy-goodness-matchers-for-regular.html, и в приведенных примерах это похоже на: утверждают, что «Groovy rocks!» = ~/Groovy/// = ~ в условном контексте возвращает boolean. поэтому в моем случае «nodename» = ~ Образец и согласно вам это Pattern = ~ 'nodename' и он тоже работает. Не могли бы вы поделиться более подробной информацией? –

+0

Он всегда работает таким образом '<что вам нужно проверить> = ~ <шаблон, который должен быть сопоставлен (регулярное выражение)>', например. '" lol "= ~/lol /'. – Opal

+0

Тогда «$ {nodeName}» = ~ $ {kv.key} должно быть правильным. 'test.domain.local' = ~ /test.domain.local/ig не так ли? В вашем первом ответе вы сказали, что мне нужно изменить «$ {kv.key}" = ~ "$ {nodeName}" /test.domain.local/ig = ~ 'test.domain.local' , и это, похоже, работает для по какой-то причине. –