我正在寻找使用单行String.split()在我正在写的查询中拉出“名称”。

Pattern + Matcher的工作与预期的一样,但是我想弄清楚为什么String.split()不返回匹配项!

public static void main(String[] asdf)
{
    final String queryText = "id <equals> `1` <AND> name <equals> `some name`";
    final String regex = "^(.*name <equals> `)([\\S\\s]*)(`.*)$";

    System.out.println("Splitting...");
    final String[] split = queryText.split(regex);
    for (int i = 0; i < split.length; i++)
    {
        System.out.println(split[i]);
    }

    System.out.println("Matching...");
    final Pattern pattern = Pattern.compile(regex);
    final Matcher matcher = pattern.matcher(queryText);

    if (matcher.find())
    {
        for (int i = 0; i < matcher.groupCount(); i++)
        {
            System.out.println(matcher.group(i + 1));
        }
    }
}

打印输出
Splitting...
Matching...
id <equals> `1` <AND> name <equals> `
some name
`

最佳答案

您正则表达式匹配整个字符串。因此,在拆分时,整个字符串将被删除。它与"a".split("a")完全相同,后者返回一个空数组。

您可以改用的是:

queryText.replaceAll(".*name <equals> `([^`]+)`.*", "$1")

返回some name

10-07 19:27
查看更多