[英]Java regex placing @ in character classes
我正在使用以下代碼來評估Java中的正則表達式,效果很好。
public class RegExTest {
public RegExTest() {
}
public static void main(String[] args) {
Pattern pattern = Pattern.compile("[^A-Za-z0-9/.@_-]");
Matcher matcher = pattern.matcher("john.connor3@resistance-aloha.net");
System.out.println(matcher.find());
}
}
但是當我將正則表達式上方的“ @”符號移到字符組的末尾時,如下所示:
[^A-Za-z0-9/._-@]
,出現以下異常:
java.util.regex.PatternSyntaxException: Illegal character range near index 15
[^A-Za-z0-9/._-@]
^
為什么字符組中'@'字符的位置相關,並且如果'@'字符位於結束']'之前,則正則表達式如何導致異常?
這是因為連字符( -
)需要在此處轉義。
[^A-Za-z0-9/._\\-@]
在字符類中,可以將連字符作為范圍內的第一個或最后一個字符。 如果將連字符放置在其他任何地方,都需要對其進行轉義以進行匹配。
問題不是@
,而是連字符( -
)。
在類( []
)中,連字符定義一個范圍,例如az
。
在第二種情況下, _
和@
之間的范圍當然是無效的,因此是錯誤的。
如果需要,可以轉義連字符來解決此問題: \\\\-
。
-
是字符類中的特殊字符,它指示范圍。
因此,您的正則表達式包含無效的_-@
范圍。 你需要逃避HTE -
像這樣\\-
"[^A-Za-z0-9/.@_\\-]"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.