正则表达式匹配问题

时间:2009-10-20 04:16:52

标签: regex match

如果我有一个字符串,如

lotsofcrap “somethingimportant” moreotherstuff

是否可以让Regex匹配“”,不包括引号之间的任何内容?所以检测它的方法就像“。*”,但这将返回“重要的东西”而不仅仅是纯粹的重要的东西

3 个答案:

答案 0 :(得分:4)

"(.*)"

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

'hello "world" !!!' =~ /"(.*)"/;
print "$1\n";

答案 1 :(得分:1)

如果您的正则表达式引擎支持零宽度断言(后视和前瞻),

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

将匹配一系列非引号字符,其中前面有引号,后面引用引号。

然而,这很愚蠢。你应该只是

"([^"]*)"

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

答案 2 :(得分: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;
}