如何在匹配约束中转义正斜杠

时间:2013-01-05 10:21:34

标签: grails groovy grails-constraints

使用匹配约束时,如何在正则表达式中转义正斜杠?这就是我试过的:

constraints {
    url (
        matches: "^http://www.google.com/$"
    )
}

错误:solution: either escape a literal dollar sign "\$5" or bracket the value expression "${5}"

constraints {
    url (
        matches: "^http:\/\/www.google.com\/$"
    )
}

错误:unexpected char: '\'

1 个答案:

答案 0 :(得分:9)

在用双引号("..")定义的字符串中,groovy用$替换变量。

def var = "world"
def str = "hello $var" // "hello world"

在验证正则表达式中,这会导致错误。您希望将$用于正则表达式而不是用于变量替换。为避免变量替换,您可以使用单引号('..'

定义字符串
def str = 'hello $var' // "hello $var"

在字符串中定义正则表达式时,您不需要转义/,但是您应该转义.。在正则表达式.匹配任何字符。因此,正则表达式^http://www.google.com/$http://wwwAgoogleB.com/匹配。

要转义字符串中的字符,您必须使用\\(第一个\用于转义第二个\)。所以下面的表达式应该有效:

static constraints = {
    name (
        matches: '^http://www\\.google\\.com/$'
    )
}

通常你也可以使用groovy正则表达式语法(/../)。在这种情况下,正则表达式看起来像这样

~/^http:\/\/www\.google\.com\/$/

你不需要双反斜杠来转义,但是你必须转义斜杠(因为它们用于终止正则表达式)。但据我所知,这种语法不适用于grails的匹配约束。