簡體   English   中英

為什么string.matches [“ +-* /”]將報告模式異常?

[英]why string.matches[“+-*/”] will report the pattern exception?

我有以下代碼:

public static void main(String[] args) {
       String et1 = "test";
       String et2 = "test";
       et1.matches("[-+*/]"); //works fine
       et2.matches("[+-*/]"); //java.util.regex.PatternSyntaxException, why?
}

因為“-”是轉義字符? 但是,如果'-'切換為'+',為什么它會正常工作呢?

這是因為-用於定義字符類中的字符范圍。 由於+在ascii表中的*之后,因此該范圍沒有意義,並且會出現錯誤。

要具有文字-在字符類的中間,必須對其進行轉義。 -是在課程的開始還是結束時沒有問題,因為它是明確的。

不需要轉義-的另一種情況是,當您之前有字符類快捷方式時,例如:

[\\d-abc]  

-在字符類( [xxx] )用於定義范圍,例如: [az]用於所有小寫字符。 如果要表示“破折號”,則必須位於第一個或最后一個位置。 我通常將其放在第一位以避免任何混亂。

或者,您可以對其進行轉義: [+\\\\-*/]

僅供參考, 此處定義了Java正則表達式元字符:

The metacharacters supported by this API are: <([{\^-=$!|]})?*+.>

作為一般規則,為了使自己免於正則表達式調試的麻煩,如果我想將這些字符中的任何一個用作文字,則可以在它們前面加上\\(或Java String表達式內的\\\\)。

要么:

et2.matches("[\\+\\-\\*/]");

要么:

et2.matches("[\\-\\+\\*/]");

不管順序如何都可以工作。

我認為您應該使用:[\\-\\ + \\ * /]因為:'-'定義范圍,例如:[ad]的意思是:a,b,c,d

暫無
暫無

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

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