4

一致制約を使用する場合、正規表現でスラッシュをエスケープするにはどうすればよいですか? これは私が試したものです:

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: '\'

4

1 に答える 1

9

二重引用符 ( ) で定義された文字列では、".."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 制約では機能しません。

于 2013-01-05T10:50:05.260 に答える