繁体   English   中英

Java Regex Matcher可以工作,但String.split()不能

[英]Java Regex Matcher works, but String.split() doesn't

我想使用一行String.split()在我正在写的查询中拉出'name'..

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

你的正则表达式涵盖了所有的字符串。 尝试删除“^”和“$”。 Split方法希望表达式不删除必须找到的表达式来检测特定子字符串。

您的正则表达式变量没有为String split()方法正确形成...尝试打破正则表达式,如此线程的答案所示...

java - 使用正则表达式拆分字符串

尝试使用正则表达式

((?<=`)[^`]*(?=`$))

因为这会给你结果“ 某个名字

id <equals> `1` <AND> name <equals> `some name`

或者,如果“ 某些名称 ”并非始终显示在最后,则可以使用

((?<=name <equals> `)[^`]*(?=`))

结果相同

感谢所有的输入。 [m.buettner]是对的。 我只是误解了String.split()应该做什么。 根据Java文档..

此方法的作用就像通过调用具有给定表达式和limit参数为零的双参数split方法一样。 因此,结尾的空字符串不包含在结果数组中。

这不是我想要的。 我将仅使用Pattern + Matcher创建一个util方法。

再次感谢大家。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM