使用匹配约束时,如何在正则表达式中转义正斜杠?这就是我试过的:
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: '\'
答案 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的匹配约束。