[英]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.