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

at0kjp5o  于 2022-11-18  发布在  Java
关注(0)|答案(2)|浏览(137)

TLDR:我希望捕获引号之外的所有内容,但在Java中使用此正则表达式\”时似乎无法做到这一点|“(?:\”|[^"])*”|([^"]+)在http://myregexp.com/等网站上运行时。有人能指出我做错了什么吗?

你好,我目前正在尝试分析一个.java源代码,并将引号之外的所有内容提取为字符串(忽略转义引号)。
例如,在以下字符串中:
这应该被捕获为“not this”和“not this”。
我应该能够用,模式和匹配器,找到“这应该被捕获”,“和”,“。
我目前拥有的是**"[^"]+\”|([^"]+),如果文档中有一对相等得“”,则此方法很有效,但只要有一个转义符,此方法就会中断.
在一个在线的regex测试器上,我试过
\”|“(?:\”|[^"])*”|([^"]+)**它似乎完全符合我的要求,但当我在Java中尝试时,它并没有。

62lalag4

62lalag41#

对于您当前的任务,您似乎可以使用匹配双引号字符串文字的模式来 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+空格
  • \"-双引号
  • [^\"\\\\]*- 0+除"\以外的字符
  • (?:\\\\.[^\"\\\\]*)*- 0+序列:
  • \\\\.-\和除换行符字符以外的任何字符
  • [^\"\\\\]*- 0+除"\以外的字符
  • \"\\s*-一个"和0+空格
7kqas0il

7kqas0il2#

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

这是一个相对较短的正则表达式模式匹配表达式。

相关问题