Java正则表达式-捕获引号之外的所有内容
TLDR:我希望捕获引号之外的所有内容,但我似乎无法在Java中使用正则表达式\“|”(?:\“|[^])*“|”([^\”])”+,而它可以在以下网站上工作:。有人能告诉我我做错了什么吗? 您好,我目前正在尝试分析.java源代码,并将引号之外的所有内容提取为字符串(忽略转义引号) 例如,在此字符串中: 这应该被捕获为“不是这个”和“不是这个” 我应该能够与,模式和匹配,找到“这应该被捕获”,“和” 我目前拥有的是\“[^\“]+\”|([^\“]+),如果文档中有一对相等的“”,它会很好地工作,但一旦有一对转义的“”,它就会断开Java正则表达式-捕获引号之外的所有内容,java,regex,quotes,matcher,Java,Regex,Quotes,Matcher,TLDR:我希望捕获引号之外的所有内容,但我似乎无法在Java中使用正则表达式\“|”(?:\“|[^])*“|”([^\”])”+,而它可以在以下网站上工作:。有人能告诉我我做错了什么吗? 您好,我目前正在尝试分析.java源代码,并将引号之外的所有内容提取为字符串(忽略转义引号) 例如,在此字符串中: 这应该被捕获为“不是这个”和“不是这个” 我应该能够与,模式和匹配,找到“这应该被捕获”,“和” 我目前拥有的是\“[^\“]+\”|([^\“]+),如果文档中有一对相等的“”,它会很好地工
在一个在线正则表达式测试仪上,我尝试了\“|”(?:\“|[^”])*“|”([^\“]+),这似乎正是我想要的,但当我在Java中尝试它时,它却没有。对于您当前的任务,您可以使用模式匹配双引号字符串文本来拆分字符串:
List[] res = s.split("\\s*\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"\\s*");
见:
图案细节:
-0+空格\\s*
-双引号\”
-0+字符,而不是[^\“\\\]*
和”
\
-0+序列:(?:\\\..^\“\\\]*)*
-a\\\.
和除换行符以外的任何字符\
-0+字符,而不是[^\“\\\]*
和”
\
-a\“\\s*
和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, .]