1

Groovyで大きな文字列を置き換えようとしています。しかし、それを機能させることはできません。Groovy 1.8.6を使用しています

def textn = "http://10.33.0.69:8001/VS_SiteFacilityLookup/SiteFacilityLookupService?XSD=/com/enbridge/csim/ebo/module/common/serviceinterface/SiteFacilityLookupService.xsd"
textn = textn.replaceAll("http://10.33.0.69:8001/VS_SiteFacilityLookup/SiteFacilityLookupService?XSD=/com/enbridge/csim/ebo/module/common/serviceinterface/SiteFacilityLookupService.xsd", "hola")
println "textn : $textn"

これにより、元の変数が出力されます

短い文字列を置き換えると、正しく置き換えられます。

def textn = "http://10.33.0.69:8001/VS_SiteFacilityLookup/SiteFacilityLookupService?XSD=/com/enbridge/csim/ebo/module/common/serviceinterface/SiteFacilityLookupService.xsd"
textn = textn.replaceAll("SiteFacilityLookupService.xsd", "hola")
println "textn : $textn"

これにより、期待される結果が出力されます

4

1 に答える 1

2

このパターンを試してください:

http:\/\/10.33.0.69:8001\/VS_SiteFacilityLookup\/SiteFacilityLookupService\?XSD=\/com\/enbridge\/csim\/ebo\/module\/common\/serviceinterface\/SiteFacilityLookupService.xsd

特殊文字をエスケープすることを覚えておく必要があります-たとえば?->\?

したがって、要約すると、次のように終了します。

def textn = "http://10.33.0.69:8001/VS_SiteFacilityLookup/SiteFacilityLookupService?XSD=/com/enbridge/csim/ebo/module/common/serviceinterface/SiteFacilityLookupService.xsd"
textn = textn.replaceAll("http:\/\/10.33.0.69:8001\/VS_SiteFacilityLookup\/SiteFacilityLookupService\?XSD=\/com\/enbridge\/csim\/ebo\/module\/common\/serviceinterface\/SiteFacilityLookupService.xsd", "hola")
println "textn : $textn"

ここでテストしました:http://gskinner.com/RegExr/

トピックについて: groovy、Java、および (願わくば!) 他の言語で文字列を置き換える場合、文字列の長さは重要ではありません。重要なのは、より大きなパターンでは、一致しない結果になるものを省略する方が簡単だということです。したがって、単純で、コードの読者が理解しやすいパターンを使用する必要があります。

例えば:

http:\/\/.*- で始まるすべての文字列に一致しますhttp://

于 2012-06-15T21:34:54.640 に答える