簡體   English   中英

在 Java 正則表達式中,如何獲取字符類(例如 [az])以匹配 - 減號?

[英]In a java regex, how can I get a character class e.g. [a-z] to match a - minus sign?

Pattern pattern = Pattern.compile("^[a-z]+$");
String string = "abc-def";
assertTrue( pattern.matcher(string).matches() ); // obviously fails

是否可以讓字符類匹配“-”?

不要在字符之間放置減號。

"[a-z-]"

轉義減號

[a-z\\-]

在字符類[...] a -兩邊都被字符包圍,它會被特殊對待(作為范圍運算符)。 這意味着如果您在字符類的開頭或結尾包含-它將按字面意思處理(非特殊)。

所以你可以使用正則表達式:

^[a-z-]+$

要么

^[-a-z]+$

由於我們添加的-是按字面處理的,因此沒有必要逃避它。 雖然如果你這樣做,這不是一個錯誤。

另一種(不太推薦)的方法是不在字符類中包含-

^(?:[a-z]|-)+$

請注意,在這種情況下,括號不是可選的,因為| 具有非常低的優先級,因此使用括號:

^[a-z]|-+$

將匹配字符串開頭的小寫字母和結尾的一個或多個-

我會更具體地重新表述“不要把它放在字符之間”。

使破折號成為字符類中的第一個或最后一個字符。 例如“[-a-z1-9]”匹配小寫字符、數字或破折號。

這對我有用

   Pattern p = Pattern.compile("^[a-z\\-]+$");
   String line = "abc-def";
   Matcher matcher = p.matcher(line);
   System.out.println(matcher.matches());  // true

暫無
暫無

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

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