繁体   English   中英

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM