簡體   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