TLDR:我希望捕获除引号之外的所有内容,但我似乎没有在Java中使用此正则表达式进行操作\" |"(?:\& #34; | [^"])*" |([^ \"] +)虽然适用于http://myregexp.com/等网站。谁能指出我做错了什么?
嗨,我目前正在尝试分析.java源代码,并将所有引号外的字符串提取为字符串(忽略转义引号)。
例如,在此字符串中:
这应该被捕获"不是这个"并且"不是\"这个"要么"
我应该能够使用模式和匹配器找到"这应该被捕获","和","。"。
我目前拥有的是 \" [^ \"] + \" |([^ \"] +),效果很好如果有一对平等的""在文件中,但一旦有逃脱就会中断。
在网上正则表达式测试人员中,我尝试了 \" |"(?:\" | [^"])*" |([^ \"] +)这似乎正是我正在寻找的东西,但是当我在Java中尝试时它并没有。
答案 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+序列:
\\\\.
- \
以及除了换行符之外的任何字符[^\"\\\\]*
- 除"
和\
\"\\s*
- "
和0+空格