获取双引号之间字符的Java正则表达式
我需要找出一个正则表达式模式,以便能够获得双引号之间的字符 这有点难以解释,但以下是我想要的: 如果我通过所说的表达式来运行:获取双引号之间字符的Java正则表达式,java,regex,Java,Regex,我需要找出一个正则表达式模式,以便能够获得双引号之间的字符 这有点难以解释,但以下是我想要的: 如果我通过所说的表达式来运行: say("ex" + "ex2", "ex3"); Pattern.compile("\\\"(.*)\\\""); 然后我将能够得到三场比赛,分别是 "ex", "ex2", and "ex3" 一切都在他们自己的范围内 我已经试过这个表达: say("ex" + "ex2", "ex3"); Pattern.compile("\\\"(.*)\\\"");
say("ex" + "ex2", "ex3");
Pattern.compile("\\\"(.*)\\\"");
然后我将能够得到三场比赛,分别是
"ex", "ex2", and "ex3"
一切都在他们自己的范围内
我已经试过这个表达:
say("ex" + "ex2", "ex3");
Pattern.compile("\\\"(.*)\\\"");
但我没有给我三个不同的组,而是得到一个组,分别是ex,ex2和ex3
那么,有人知道一个表达式来提供我想要的输出吗?您可以使用非贪婪的方法来实现这一点:
"\\\"(.*?)\\\""
一个非贪婪的群体从可能的那一刻起就开始切割。在这种情况下,从找到第二个双引号开始
或者,例如,匹配引号中的所有字符:
"(\\\"[^\"]*)\\\")"
[^list]指除列表中的字符外的所有字符
此外,您还可以通过省略双转义使其更具可读性:
"[\"]([^\"]*)[\"]"
此外,请注意,这不适用于递归模式:如果要匹配的字符串是foo-inner-bar,那么它将匹配foo而不是foo-inner-bar,但我想这就是我们要寻找的语义
编辑:
如果还允许转义双引号,则可以使用负查找:
"([\"][^\"]*(?<!\\\\)[\"])"
这用于指定字符串Foo\a real backspace
一种可能的解决方案是检查lookback是否包含奇数个连续反斜杠,但Java不支持这种方法,解决方案是使匹配的内部循环更加复杂:
"([\"]([^\\\\\"]*([\\\\].)*)*[\"])"
未scaped此正则表达式是:
(["]([^\\"]*([\\].)*)*["])
^ ^ ^ ^
| | | \- tailing double quote
| | \- if backslash, skip next character (for instance `\\`, `\"` or `\n`
| \- match all except double quotes and backslashes
\-beginning double quote
如图所示,它从stdin中读取一个原始字符串并输出捕获的组。您可以使用非贪婪方法执行此操作:
"\\\"(.*?)\\\""
一个非贪婪的群体从可能的那一刻起就开始切割。在这种情况下,从找到第二个双引号开始
或者,例如,匹配引号中的所有字符:
"(\\\"[^\"]*)\\\")"
[^list]指除列表中的字符外的所有字符
此外,您还可以通过省略双转义使其更具可读性:
"[\"]([^\"]*)[\"]"
此外,请注意,这不适用于递归模式:如果要匹配的字符串是foo-inner-bar,那么它将匹配foo而不是foo-inner-bar,但我想这就是我们要寻找的语义
编辑:
如果还允许转义双引号,则可以使用负查找:
"([\"][^\"]*(?<!\\\\)[\"])"
这用于指定字符串Foo\a real backspace
一种可能的解决方案是检查lookback是否包含奇数个连续反斜杠,但Java不支持这种方法,解决方案是使匹配的内部循环更加复杂:
"([\"]([^\\\\\"]*([\\\\].)*)*[\"])"
未scaped此正则表达式是:
(["]([^\\"]*([\\].)*)*["])
^ ^ ^ ^
| | | \- tailing double quote
| | \- if backslash, skip next character (for instance `\\`, `\"` or `\n`
| \- match all except double quotes and backslashes
\-beginning double quote
看到这个,它从stdin中读取一个原始字符串并输出捕获的组。嘿,这很有效,但假设我有这样一个:这是一个\string\n那么它将不起作用,你知道解决方法吗?@bernhardkiv:你试过涂鸦吗?请注意,您必须双引号引字符串以引入硬退格…嗯,我不确定我是否清楚,我希望它匹配这是一个\string\all-in-one组,我之所以转义引号是因为我在eclipse中使用纯文本。这够清楚吗/@伯恩哈德基夫:那只是放括号的问题。更新了answer和jdoodle。我尝试了jdoodle,但也不起作用,它只是输出了以下内容:输入:这是一个字符串嘿,效果很好,但举个例子,我有一个:这是一个\string\n那么它将不起作用,你知道解决方法吗?@bernhardkiv:你尝试过涂鸦吗?请注意,您必须双引号引字符串以引入硬退格…嗯,我不确定我是否清楚,我希望它匹配这是一个\string\all-in-one组,我之所以转义引号是因为我在eclipse中使用纯文本。这够清楚吗/@伯恩哈德基夫:那只是放括号的问题。更新了answer和jdoodle。我尝试了jdoodle,但也不起作用,它只输出了以下内容:输入:这是一个字符串