Java 正则表达式 - 捕获引号外的所有内容
Java Regex - Capturing everything outside quotes
TLDR:我希望捕获引号之外的所有内容,但在 Java 中我似乎无法使用此正则表达式 \"|"(?:\" |[^"])*"|([^\"]+) 而它适用于 http://myregexp.com/ 等网站。谁能指出我做错了什么?
你好,我目前正在尝试分析 .java 源代码并将引号外的所有内容提取为字符串(忽略转义引号)。
例如,在这个字符串中:
This should be captured "not this" and "not \"this\" either".
我应该能够使用模式和匹配器找到 "This should be captured"、"and"、“.”。
我目前拥有的是 \"[^\"]+\"|([^\"]+),如果有一对相等的"" 在文档中,但一旦出现转义就会中断。
在在线正则表达式测试器上,我尝试了 \"|"(?:\"|[^"])*"|([^\"]+) 哪个似乎完全符合我的要求,但是当我在 Java 中尝试时却没有。
看来对于您当前的任务,您可以使用一种模式将双引号字符串文字与 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+ 个空格
TLDR:我希望捕获引号之外的所有内容,但在 Java 中我似乎无法使用此正则表达式 \"|"(?:\" |[^"])*"|([^\"]+) 而它适用于 http://myregexp.com/ 等网站。谁能指出我做错了什么?
你好,我目前正在尝试分析 .java 源代码并将引号外的所有内容提取为字符串(忽略转义引号)。
例如,在这个字符串中:
This should be captured "not this" and "not \"this\" either".
我应该能够使用模式和匹配器找到 "This should be captured"、"and"、“.”。
我目前拥有的是 \"[^\"]+\"|([^\"]+),如果有一对相等的"" 在文档中,但一旦出现转义就会中断。
在在线正则表达式测试器上,我尝试了 \"|"(?:\"|[^"])*"|([^\"]+) 哪个似乎完全符合我的要求,但是当我在 Java 中尝试时却没有。
看来对于您当前的任务,您可以使用一种模式将双引号字符串文字与 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+ 个空格