Java正则表达式-捕获引号之外的所有内容

Java正则表达式-捕获引号之外的所有内容,java,regex,quotes,matcher,Java,Regex,Quotes,Matcher,TLDR:我希望捕获引号之外的所有内容,但我似乎无法在Java中使用正则表达式\“|”(?:\“|[^])*“|”([^\”])”+,而它可以在以下网站上工作:。有人能告诉我我做错了什么吗? 您好,我目前正在尝试分析.java源代码,并将引号之外的所有内容提取为字符串(忽略转义引号) 例如,在此字符串中: 这应该被捕获为“不是这个”和“不是这个” 我应该能够与,模式和匹配,找到“这应该被捕获”,“和” 我目前拥有的是\“[^\“]+\”|([^\“]+),如果文档中有一对相等的“”,它会很好地工

TLDR:我希望捕获引号之外的所有内容,但我似乎无法在Java中使用正则表达式\“|”(?:\“|[^])*“|”([^\”])”+,而它可以在以下网站上工作:。有人能告诉我我做错了什么吗?

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

例如,在此字符串中:

这应该被捕获为“不是这个”和“不是这个”

我应该能够与,模式和匹配,找到“这应该被捕获”,“和”

我目前拥有的是\“[^\“]+\”|([^\“]+),如果文档中有一对相等的“”,它会很好地工作,但一旦有一对转义的“”,它就会断开


在一个在线正则表达式测试仪上,我尝试了\“|”(?:\“|[^”])*“|”([^\“]+),这似乎正是我想要的,但当我在Java中尝试它时,它却没有。

对于您当前的任务,您可以使用模式匹配双引号字符串文本来拆分字符串:

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

图案细节

  • \\s*
    -0+空格
  • \”
    -双引号
  • [^\“\\\]*
    -0+字符,而不是
    \
  • (?:\\\..^\“\\\]*)*
    -0+序列:
    • \\\.
      -a
      \
      和除换行符以外的任何字符
    • [^\“\\\]*
      -0+字符,而不是
      \
  • \“\\s*
    -a
    和0+空格

尝试
List[]res=s.split(“\\s*\”[^\\\\\]*(?:\\\\\.^\\\\\]*)*\“\\s*”)看。这个很好用,非常感谢!我将尝试了解正则表达式的工作原理,并将其应用于注释源代码(如/*/、/***/和/\n)。向我们展示您的实际Java代码——理想情况下也是一种失败的测试方法。请注意,Java中类似于注释的
/*…*/
的正则表达式是。谢谢,这正是我想要的!它帮助我更好地理解语法,现在我可以尝试为我需要的其余步骤构建自己的语法。
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, .]