2012-07-08 15 views

Odpowiedz

5

Jest to właściwie dwie ucieczki w różnych kontekstach, z uwagi na fakt, że argument jest wyrażeniem regularnym reprezentowane jako ciąg znaków.

Należy uciec, ponieważ [ miałoby specjalne znaczenie w wyrażeniu regularnym. Ucieczka dla wyrażenia regularnego sprawi, że będzie to \[. Ale wtedy \ musi zostać zmienione, ponieważ ma specjalne znaczenie w łańcuchu znaków (w celu uniknięcia i przedstawienia znaków po wartości liczbowej).

Może być znacznie gorzej, ponieważ znak \ służy do ucieczki w obu kontekstach. Jeśli chcesz podzielić przez znak \, musisz uciec z niego (\\) w celu użycia wyrażenia regularnego, ale masz dwie znaki \, które muszą zostać zmienione w kontekście ciągu znaków. Wykorzystanie w oryginalnym ciąg jesteś dzielenie musiałaby również ucieczkę jeśli piszesz go jako stała, więc analogiczna Podział wyglądałby następująco:

"hello\\world".split("\\\\") 
1

Różne wersje Groovy dać różne wyniki.

Dla Groovy 1,1-beta-1 i r

assert "hello[world".split("\\[") == ["hello", "world"] 

twierdzi OK, ale Groovy 1.0 i przed daje błąd twierdzenia.

assert "hello[world".split(/\[/) == ["hello", "world"] 

twierdzi OK dla wszystkich wersji z 1,1-beta-1 r Groovy 1.0 JSR-01 do 1,0 daje błąd twierdzenia podczas Groovy 1,0-beta-10 i przed daje błąd leksykalny.

"hello[world".split("\\[").each{println it} 

dla wszystkich wersji Groovy z 1,0-beta-5, i beta-3, drukuje

hello 
world 

lecz 1,0-beta-4 drukuje

[.] 
[.] 
hello 
world 
Powiązane problemy