2012-07-08 21 views

cevap

5

Bunun nedeni argümanının dize olarak temsil düzenli ifadedir olması nedeniyle, aslında farklı bağlamlarda iki kaçar olduğunu. [[['dan çıkmak zorundadır, aksi halde normal ifadede özel bir anlamı olacaktır. Düzenli ifadenin kaçışı onu \[ yapar. Ancak, \'un bir dizede özel bir anlamı olduğu için (kaçmak ve karakterleri sayısal değere göre göstermek için) kaçmak gerekir.

\ karakteri her iki bağlamda kaçmak için kullanıldığı için çok daha kötü olabilir. \ karakteriyle bölmek istiyorsanız, normal ifade kullanımı için onu (\\) kullanmanız gerekir, ancak her ikisi de dizgi bağlamında kaçması gereken iki \ karakteriniz vardır. Groovy ait

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

farklı sürümleri farklı sonuçlar verir: Eğer sabit olarak yazıyorsanız benzer bölünmüş gibi görünecektir böylece bölme orijinal dizesinde kullanımı da, kaçış gerekir. Groovy 1.1-beta-1 ve sonrası için

,

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

Tamam ileri sürerken, Groovy 1.0 ve daha önce bir onaylama hata verir. Groovy 1.0-beta-10 öncesi ve bir sözcük hata veriyor ise

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

, 1,0'a 1,0-jsr-01 bir onaylama işlemi hatası veriyor Groovy 1.1-BETA-1 itibaren tüm sürümleri, OK belirtmektedir. 1,0-beta-5 ve beta-3'ten Groovy tüm sürümleri için

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

, baskılar

hello 
world 

ancak 1,0-beta-4 baskılar

[.] 
[.] 
hello 
world