提问人:Beerbossa 提问时间:1/26/2017 最后编辑:VLAZBeerbossa 更新时间:8/27/2023 访问量:439
Java 正则表达式 - 捕获引号之外的所有内容
Java Regex - Capturing everything outside quotes
问:
TLDR:我希望捕获引号之外的所有内容,但我似乎无法在 Java 中使用这个正则表达式 \“|”(?:\"|[^"])*"|([^\“]+) 而它适用于 http://myregexp.com/ 等网站。谁能指出我做错了什么?
嗨,我目前正在尝试分析 .java 源代码并将引号以外的所有内容提取为字符串(忽略转义引号)。
例如,在此字符串中:
这应该被捕获为“不是这个”和“也不是”这个”。
我应该能够使用模式和匹配器找到“这应该被捕获”、“和”、“.”。
我目前拥有的是\“[^\”]+\“|([^\“]+),如果文档中有一对相等的 ”“,则效果很好,但一旦有转义的 ”“ 就会中断。
在在线正则表达式测试仪上,我尝试了\“|”(?:\"|[^"])*"|([^\"]+)这似乎完全符合我的要求,但是当我在 Java 中尝试它时,它并没有。
答:
2赞
Wiktor Stribiżew
1/27/2017
#1
似乎对于您当前的任务,您可以使用一种模式来匹配双引号字符串文字来拆分字符串:
List[] res = s.split("\\s*\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"\\s*");
查看 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, .]
图案细节:
\\s*
- 0+ 空格\"
- 双引号[^\"\\\\]*
- 0+ 除 和 之外的字符"
\
(?:\\\\.[^\"\\\\]*)*
- 0+ 序列:\\\\.
- a 和除换行符以外的任何字符\
[^\"\\\\]*
- 0+ 除 和 之外的字符"
\
\"\\s*
- a 和 0+ 空格"
评论
0赞
Beerbossa
1/27/2017
谢谢,这绝对是我想要的!它帮助我更好地理解语法,我现在可以尝试为我需要的其余步骤构建自己的语法。
0赞
Ela Singh
11/7/2022
#2
String s = "This should be captured \"not this\" and \"not \\\"this\\\" either\".";
String[] res = s.split("\"([^\"]*)\"");
System.out.println(Arrays.toString(res));
这是一个相对较短的正则表达式模式匹配表达式。
上一个:类参数缺少最终引号
下一个:将变量放入引号后的打印周期
评论
List[] res = s.split("\\s*\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"\\s*");
/*...*/