[英]How to give range in lookhead using regex e.g ^(?=(.*[a-z]){1,3})(?=.*[0-9]).{2,5}$
[英]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.