为什么lookbehind在这个String中失败?

时间:2016-06-07 05:13:22

标签: java regex regex-negation

我试图从JSON文本中抢夺一个字符串,由于某种原因,我一直在失败。我没有使用JSON解析器的原因是因为我认为使用正则表达式会更容易,因为它只是一个字段,但我可能在这里遗漏了一些东西。这就是我想要实现的目标:

我想要获得的JSON字符串部分:

  

" text":"在此处插入文字",

我的代码:

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

我的逻辑:
匹配任何不是&#39;&#34;然后是\(\&#34;)&#34;

如果我使用[^ \&#34;],它似乎有效。但是,文本中可能会有引号,并且确保文本字符串实际结束的唯一方法是找到不用反斜杠进行的引用。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

你不需要看守......

试试这个:

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

Java ready:

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

解释here

但是如果你想要看后卫:

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

解释here