具有连字符的Groovy正则表达不匹配

时间:2014-05-28 13:29:27

标签: regex string groovy

我想编写一个正则表达式,它会在任何给定字符串中遇到子字符串“my-app”时匹配。

我有以下Groovy代码:

String regex = ".*my-app*"
String str = getStringFromUserInput()
if(str.matches(regex) {
    println "Match!"
} else {
    println "Doesn't match..."
}

getStringFromUserInput()返回“ blahmy-appfizz ”之类的字符串时,上面的代码仍会报告Doesn't match...。所以我认为连字符必须是正则表达式中的特殊字符,并尝试将正则表达式更改为:

String regex = ".*my--app*"

但仍然没有改变。关于我哪里出错的任何想法?

2 个答案:

答案 0 :(得分:1)

连字符不是特殊字符。

matches验证整个输入。尝试:

String regex = ".*my-app.*"

请注意,p*匹配零个或多个pp.*匹配p后跟零个或多个字符(除了换行符)。

假设getStringFromUserInput()未在输入中留下任何换行符。在这种情况下,您需要执行trim()来摆脱它,因为.*与换行符不匹配。

答案 1 :(得分:1)

String.contains似乎比正则表达式更简单,例如

String stringFromUser = 'my-app'
assert 'foomy-appfoo'.contains(stringFromUser)
assert !'foo'.contains(stringFromUser)