2016-06-07 54 views
0

我試圖從JSON文本中抓取一個字符串,出於某種原因,我一直在失敗。我沒有使用JSON解析器的原因是因爲我認爲用正則表達式來獲取它會更容易,因爲它只是一個字段,但我可能在這裏錯過了一些小東西。這裏就是我想要實現:爲什麼lookbehind在此字符串中失敗?

的JSON字符串的一部分,我試圖讓:

「文」:「在這裏插入文本」,

和我代碼:

String p1 = "\"text\": \"((?<!\\\\)\"+)\""; 
      Pattern pa1 = Pattern.compile(p1); 
      Matcher m = pa1.matcher(s); 
      while (m.find()) { 
       System.out.println(m.group()); 
      } 

我的邏輯:
匹配任何不是「」,其次是\(\ 「)」

如果我使用[^ \「],它似乎工作。但是,文本中可能有引號,並且確保文本字符串實際上結束的唯一方法是查找不是由反斜槓進行的引用。

我在這裏錯過了什麼?

回答

0

你不需要lookbehinds ...

試試這個:

"text": "(([^\\"]|\\")+)" 

Java的準備:

"\"text\": \"(([^\\\\\"]|\\\\\")+)\"" 

說明here

但是如果你想lookbehinds:

"text": "(([^"]|(?!<\\)")+)" 

說明here