如果我有一个字符串,例如
很多废话“重要的东西”更多其他的东西
是否有可能让正则表达式匹配“”之间的任何内容,不包括引号?因此检测它的方法类似于".*",但这将返回"somethingimportant"而不仅仅是纯粹的 somethingimportant
"(.*)"
您可以使用括号来创建捕获组。您如何访问它取决于您使用的语言/库——通常捕获组可作为$1
或\1
类似 Perl 的语言使用。例如,在 Perl 中:
'hello "world" !!!' =~ /"(.*)"/;
print "$1\n";
如果您的正则表达式引擎支持零宽度断言(look-behinds 和look-aheads),
(?<=")[^"]*(?=")
将匹配一系列非引号字符,其中出现之前的引号和之后的引号。
然而,这很愚蠢。你应该简单地
"([^"]*)"
匹配所有内容,包括引号,然后将第 1 组(括号组)拉出匹配项。
尝试"(.*?)"
这?
意味着 .*
将根据需要扩展(直到它与下一个匹配)”在这种情况下)。
Java 代码:
static String regex = "\"(.*?)\"";
static Pattern p = Pattern.compile(regex);
public static List<String> getMatches(String inputText) {
Matcher m = p.matcher(inputText);
List<String> list = new ArrayList<String>();
while(m.find()){
list.add(m.group(1));
}
return list;
}