簡體   English   中英

(Java)如何在String.replaceAll()的“ replacement”參數中模擬正則表達式?

[英](Java) How to mimic a regex in the “replacement” argument of String.replaceAll()?

不用擔心,我不是要您幫助我找到正則表達式!

我目前正在使用該方法

String.replaceAll(String regex, String replacement)

解析一行用戶提供的數據並獲取用戶名。 我這樣做是通過剝離除所需數據以外的所有內容,然后返回該數據。

假裝

String rawTextInput = "Machine# 000111 
                       Password: omg333444"

我希望用戶名是計算機號。 我的方法:

private String getUsername(String rawTextInput) {
    String username = rawTextInput.replaceAll("(.+#\\s\\d{6,6})", "(\\d{6,6})");
    return username;
}

第一個參數regex (。+#\\ s \\ d {6,6})正確標識原始輸入的第一行Machine#000111

第二個參數/正則表達式(\\ d {6,6})正確隔離了我想要的數據000111

基本上,此方法告訴程序執行的操作是“找到帶有Machine#000111的行,並將該行剝離為000111

實際產量

但是,我顯然不正確地使用了ReplaceAll()的第二個參數,因為我要返回原義正則表達式

username = "(\\d{6,6})"

預期產量

代替

username = "omg333444"

在這里獲取用戶名的正確方法是什么? 有沒有辦法模仿ReplaceAll()的Replacement參數中正則表達式的存在?

請注意,此示例中的代碼塊具有重復的“ \\”字符,因為它們是IntelliJ IDEA中的轉義字符。

實際上,IntelliJ會為replace選項執行此操作。 您可以通過按Ctrl + R(或您平台上的同等功能)並對其進行測試來進行測試。

答案是,在解析時會根據組的位置為組提供一個數字。 例如,您的當前正則表達式將被視為一個組,因為整個比賽過程中都有一組括號。 如果您將數字分為一個單獨的組,則可以在替換組中使用。 您的新正則表達式可能如下所示:

.+#\\s(\\d{6,6})

這樣,數字在第一組中被隔離。

然后,通過組的位置和前面的$來表示組。 因此,您的新替換項將如下所示:

String username = rawTextInput.replaceAll(".+#\\s(\\d{6,6})", "$1");

有關替換字符的更多信息,請參見此線程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM