[英]Extract a substring between double quotes with regular expression in Java
[英]Java regular expression to get characters between double quotes
我需要弄清楚一个正则表达式(模式),以便能够在双引号之间获得字符。
有点难以解释,但这是我想要的:
如果我通过上述表达式运行它:
say("ex" + "ex2", "ex3");
然后,我将能够获得三场比赛;
"ex", "ex2", and "ex3"
全部以自己的方式进行。
我已经尝试过以下表达式:
Pattern.compile("\\\"(.*)\\\"");
但是我没有给我三个不同的.group()
,而是得到了一个.group
,分别是"ex", "ex2", and "ex3"
那么,有人知道一个表达式可以给我我想要的输出吗?
您可以使用非贪婪方法进行此操作:
"\\\"(.*?)\\\""
从有可能的那一刻开始,不贪心地削减一个群体。 在这种情况下,从找到第二个双引号的那一刻起。
或者例如匹配引号中的所有字符appart:
"(\\\"[^\"]*)\\\")"
[^list]
意味着除了在字符中的所有字符list
此外,您可以通过省略两次转义来使其更具可读性:
"[\"]([^\"]*)[\"]"
还要注意,这不适用于递归模式:如果要匹配的字符串是"foo "inner" bar"
,它将匹配"foo "
而不是"foo "inner" bar"
,但是我想这是一种语义寻找。
编辑:
如果还允许使用转义的双引号,则可以在后面使用负号:
"([\"][^\"]*(?<!\\\\)[\"])"
(?<!\\\\\\\\)
-未转义(?<!\\)
-表示前面的一个字符不允许使用退格键。
但是,这种方法的问题在于,还可以指定一个字符串:
"Foo\\"
这用于指定字符串Foo\\
(实际的退格键)。
一个可能的解决方案是检查后向是否包含奇数个连续的反斜杠,但是Java不支持,因此解决方案是使匹配的内部循环更加复杂:
"([\"]([^\\\\\"]*([\\\\].)*)*[\"])"
此正则表达式未转义为:
(["]([^\\"]*([\\].)*)*["])
^ ^ ^ ^
| | | \- tailing double quote
| | \- if backslash, skip next character (for instance `\\`, `\"` or `\n`
| \- match all except double quotes and backslashes
\-beginning double quote
参见此jdoodle ,它从stdin
读取原始字符串并输出捕获的组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.