0

如果我有一个字符串,例如

很多废话“重要的东西”更多其他的东西

是否有可能让正则表达式匹配“”之间的任何内容,不包括引号?因此检测它的方法类似于".*",但这将返回"somethingimportant"而不仅仅是纯粹的 somethingimportant

4

3 回答 3

4
"(.*)"

您可以使用括号来创建捕获组。您如何访问它取决于您使用的语言/库——通常捕获组可作为$1\1类似 Perl 的语言使用。例如,在 Perl 中:

'hello "world" !!!' =~ /"(.*)"/;
print "$1\n";
于 2009-10-20T04:21:30.417 回答
1

如果您的正则表达式引擎支持零宽度断言(look-behinds 和look-aheads),

(?<=")[^"]*(?=")

将匹配一系列非引号字符,其中出现之前的引号和之后的引号。

然而,这很愚蠢。你应该简单地

"([^"]*)"

匹配所有内容,包括引号,然后将第 1 组(括号组)拉出匹配项。

于 2009-10-20T04:21:01.433 回答
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;
}
于 2009-10-20T04:33:05.293 回答