Java Regex - 捕获引号之外的所有内容

时间:2017-01-26 02:42:28

标签: java regex quotes matcher

TLDR:我希望捕获除引号之外的所有内容,但我似乎没有在Java中使用此正则表达式进行操作\" |"(?:\& #34; | [^"])*" |([^ \"] +)虽然适用于http://myregexp.com/等网站。谁能指出我做错了什么?

嗨,我目前正在尝试分析.java源代码,并将所有引号外的字符串提取为字符串(忽略转义引号)。

例如,在此字符串中:

  

这应该被捕获"不是这个"并且"不是\"这个"要么"

我应该能够使用模式和匹配器找到"这应该被捕获","和","。"。

我目前拥有的是 \" [^ \"] + \" |([^ \"] +),效果很好如果有一对平等的""在文件中,但一旦有逃脱就会中断。

在网上正则表达式测试人员中,我尝试了 \" |"(?:\" | [^"])*" |([^ \"] +)这似乎正是我正在寻找的东西,但是当我在Java中尝试时它并没有。

1 个答案:

答案 0 :(得分:1)

对于您当前的任务,您可以使用模式将双引号字符串文字与 split 字符串匹配:

List[] res = s.split("\\s*\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"\\s*");

请参阅Java demo

String s = "This should be captured \"not this\" and \"not \\\"this\\\" either\".";
String[] res = s.split("\\s*\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"\\s*");
System.out.println(Arrays.toString(res));
// => [This should be captured, and, .]

模式详情

  • \\s* - 0+ whitespaces
  • \" - 双引号
  • [^\"\\\\]* - 除"\
  • 以外的0个字符
  • (?:\\\\.[^\"\\\\]*)* - 0+序列:
    • \\\\. - \以及除了换行符之外的任何字符
    • [^\"\\\\]* - 除"\
    • 以外的0个字符
  • \"\\s* - "和0+空格