2010-10-15 20 views
1

我試圖解析使用Grails一個JSON,來測試我寫了一個單元測試解析器,把我的輸入JSON在GString的,看起來是這樣的:正則表達式從一個Groovy的GString刪除」

"""{"Information":"Some data here \"stuff\" some more.","AnswerToEverything":42,"Other":71,"Name":"Joe Doe"}""" 

的\「東西\」導致解析器打破。

我嘗試使用String.replace(/\\"/, "")和其他幾個組合刪除\」,但它要麼什麼都不做或刪除所有字符串中的引號。 This post告訴我需要使用5個斜槓:\\\\\"才能在Java中工作,但它在Groovy中不起作用。

編輯:這個測試應該通過它的工作:

str = """foo \"foobar\" bar""" 
assert str.replace("""\\\"""", "") == "foo foobar bar" 

有了它未能在上述正則表達式。

任何提示?

+0

您鏈接的帖子實際上似乎表明,你需要5條總斜線:「你需要四個反斜槓得到一個到輸出,和一個更多到 轉義雙引號「 – eldarerathis 2010-10-15 16:45:21

+0

5斜線也不起作用(或從1到6的任何東西,測試只是爲了確保)。糾正了這個錯誤,謝謝。 – 2010-10-15 17:21:11

回答

1

從我所知道的情況來看,用/regexp/寫成的正則表達式似乎遇到了逃脫反斜槓的問題。你可以寫與"""正則表達式構造,像這樣:

str = "\\\"" 
assert str[0] == "\\" 
assert str[1] == "\"" 

assert str =~ """\\\"""" 
assert str.replace("""\\\"""", "") == "" 

編輯:JSON在原崗位不包含任何文字反斜線。即使在"""strings"""中,您仍然需要跳過字面反斜槓。我猜你想逃避那些像下面json2

json1 = """{"Information":"Some data here \"stuff\" some more.","AnswerToEverything":42,"Other":71,"Name":"Joe Doe"}""" 
json2 = """{"Information":"Some data here \\"stuff\\" some more.","AnswerToEverything":42,"Other":71,"Name":"Joe Doe"}""" 
assert !json1.contains("\\") 
assert json2.contains("\\") 
assert json2.replace("""\\\"""", "replacement").contains("replacement") 
+0

沒有工作,我用你的代碼來創建一個簡單的測試,代碼是在原來的問題(格式不起作用的評論)。 – 2010-10-15 20:32:22

+0

感謝您的輸入,我實際上沒有控制輸入JSON的內容,我得到的字符串就像您的'json1'示例,我試圖刪除\「,所以JSON解析器工作。斜槓(\\「)我不得不手動編輯輸入,或者找出一種方法來檢測\」在正則表達式中,所以我可以用\\替換它「或者只是刪除它。 – 2010-10-16 09:25:01

+0

這個例子適合我。 – JeffSea 2011-01-20 21:32:56