我正在寻找使用单行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
。