[英]Java RegEx - special character til end of string
鑒於字符串的規則是
[Random Nr of Letters]##[Random Nr of Letters]#[Random Nr of Letters]##########
字符串長度必須為35
My String例如看起來像
TEST##TESTING#TEST#################
我的問題是我無法檢測到錯誤的格式
TEST##TESTING#TEST##A##############
我的方法是:
private static boolean test(String test_line) {
String test = "[A-Z]{1,}##[A-Z]{1,}#[A-Z]{1,}#{1,}";
Pattern test_pattern = Pattern.compile(test);
Matcher matcher = test_pattern.matcher(test_line);
return matcher.find();
}
是否有一個簡單的方法與RegEx(我必須使用它),如“用#結束此字符串,不允許其他字符”。
另一個問題:我怎樣才能確保我的測試不會允許其他字符而不是AZ 0-9和#? 就像是:
String test = "([^A-Z][^0-9][#])";
Pattern test_pattern = Pattern.compile(test);
Matcher matcher = test_pattern.matcher(test_line);
return matcher.find();
(與談判)
謝謝您的幫助 :)
讓我們一步一步做:
為了確保某些字符串具有特定長度的正則表達式可以看起來像
^.{35}$
哪里
^
表示字符串的開頭 .
代表任何字符(在行分隔符旁邊) {35}
代表了多少次前一個元素(以出情況.
-任何字符)可以出現,所以這里正則表達式需要35個字符 $
表示字符串的結尾 在您的情況下,您只想接受范圍AZ
和#
字符,以便您可以替換.
(任何角色)有這個角色類 [AZ#]
所以你的正則表達式看起來像
^[A-Z#]{35}$
但是你也想確保這些角色的順序。 換句話說,您還想檢查整個字符串是否與其他正則表達式匹配
^[A-Z]{1,}##[A-Z]{1,}#[A-Z]{1,}#{1,}$
實際上我們可以簡單地使用+
來代替{1,}
^[A-Z]+##[A-Z]+#[A-Z]+#+$
要結合這兩個正則表達式可以使用前瞻機制,讓我們窺視字符位置之后,它被使用,它匹配一些額外的正則表達式后檢查字符。
所以最終的正則表達式看起來像
^(?=[A-Z#]{35}$)[A-Z]+##[A-Z]+#[A-Z]+#+$
----------- ------------------------
regex1 (length) regex2 (order)
現在為了避免每次調用方法時重新編譯( Pattern.compile(test)
)相同的正則表達式,最好將其編譯后的版本作為類字段存儲在方法之外。 所以嘗試類似的東西
private static Pattern test_pattern = Pattern
.compile("^(?=[A-Z#]{35}$)[A-Z]+##[A-Z]+#[A-Z]+#+$");
private static boolean test(String test_line) {
return test_pattern.matcher(test_line).matches();
}
測試
System.out.println(test("TEST##TESTING#TEST#################"));//true
System.out.println(test("TEST##TESTING#TEST##A##############"));//false
試試吧
[a-zA-Z]+#{2}[a-zA-Z]+#{1}[a-zA-Z]+#{1,}
要么
^([a-zA-Z]+#{2}[a-zA-Z]+#{1}[a-zA-Z]+#{1,})$
要么
^(?=.{35}$)([A-Z]+#{2}[A-Z]+#{1}[A-Z]+#{1,})$
TEST##TESTING#TEST################# // pass
TEST##TESTING#TEST##A############## // fail
對於指定的格式,確保最后一個字符是#
:
([A-Z]+[#]+){3}
要測試字符串的長度:
if(test.length == 35)
// ...
要測試和允許數字(僅限字母數字和#
符號):
([A-Z0-9]+[#]+){3}
允許使用小寫字母:
(\w+#+){3}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.