簡體   English   中英

Java正則表達式在字符類中放置@

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

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