二重引用符 ( ) で定義された文字列では、".."
groovy は変数を に置き換えます$
。
def var = "world"
def str = "hello $var" // "hello world"
検証正規表現では、これによりエラーが発生しています。$
変数の置換ではなく、正規表現にを使用します。変数の置換を避けるために、文字列を一重引用符 ( '..'
)で定義できます。
def str = 'hello $var' // "hello $var"
/
文字列内で正規表現を定義するときにエスケープする必要はありませんが、エスケープする必要があります.
。正規表現.
では、任意の文字に一致します。したがって、正規表現は に^http://www.google.com/$
一致しhttp://wwwAgoogleB.com/
ます。
文字列内の文字をエスケープするには、使用する必要があります\\
(最初の\
ものは 2 番目のものをエスケープするためのものです\
)。したがって、次の式が機能するはずです。
static constraints = {
name (
matches: '^http://www\\.google\\.com/$'
)
}
通常、groovy 正規表現構文 ( ) も使用できます/../
。この場合、正規表現は次のようになります
~/^http:\/\/www\.google\.com\/$/
エスケープするために二重のバックスラッシュは必要ありませんが、スラッシュをエスケープする必要があります (正規表現の終了に使用されるため)。しかし、私が知る限り、この構文は grails の match 制約では機能しません。