正則匹配規則及常用模式串(待續)
阿新 • • 發佈:2018-11-28
正則匹配:
1.非列印字元:
\f 換頁符; \n 換行符; \r 回車符 ; \t製表符; \v垂直製表符; \s任何空白字元
2.特殊字元:
^ 要求模式串中^後的字元必須在匹配串的開頭,如abcde和 ^abc匹配
$ 要求模式串中$前的字元必須在匹配串的結尾,如abcde和 cde$匹配
* 要求前面的字元出現0次或多次
+ 要求前面的字元出現1次或多次
? 要求前面的字元出現0次或1次
() 表示將()中的內容視為一個整體,如^(abc)表示匹配串必須以abc開頭
[] 表示取[]中內容的其中之一,如[abc]表示a或b或c
{} 修飾匹配次數,用於限定符,如a{2,5}表示出現2-5次a
| 表示或者的意思,如a|b可以匹配a或b
. 可以匹配任何換行符\n之外的任何字元
3.限定符(6種): 表示出現次數
* + ? {n} {n,} {n,m}
4.元字元
[^abc] 表示對abc取反,不匹配abc中的任何一個字元
[^a-z] 表示對a-z取反,不匹配a-z中的任何一個字元
\b 匹配一個單詞邊界,如bc\b可以和abc匹配,但不和abcd匹配
\B 不匹配一個單詞邊界,如bc\B可以和abcd匹配,但不和abc匹配
\d 匹配一個數字字元。等價於 [0-9]
\D 匹配一個非數字字元。等價於 [^0-9]
\w 匹配字母、數字、下劃線。等價於’[A-Za-z0-9_]’
\W 匹配非字母、數字、下劃線。等價於 ‘[^A-Za-z0-9_]’。
Java中使用正則匹配:
public static boolean match(String patternString, String matcherString){
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(matcherString);
return matcher.matches();
}
常用的模式串或方法:
IP:
^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\. ((1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.){2} (1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$
子網掩碼
public class MaskUitl{
//先檢查是否是一個IP,再檢查是否符合掩碼規範,最後檢查該掩碼是否和給定IP匹配
public static boolean checkMask(String ip,String mask) {
if (MaskUitl.isIPAddressHost(mask) && MaskUitl.isSubnetMaskHost(mask)) {
return MaskUitl.isLegalSubnetMask(ip, mask))
}
}
//檢查掩碼基本格式
public static boolean isSubnetMaskHost(String ipStr) {
if (ipStr.length() == 0) {
return false;
}
int maskInt = IPtoInt(ipStr);
maskInt = ~maskInt + 1;
return ((maskInt & (maskInt - 1)) == 0);
}
private static int IPtoInt(String ipStr) {
if (ipStr == null || ipStr.length() == 0) return 0;
int ipInt = 0;
String[] ipArr = ipStr.split("\\.");
for (int i = 0; i < 4; i++) {
if (Integer.parseInt(ipArr[i]) > 255) return 0;
ipInt |= (Integer.parseInt(ipArr[i]) & 0xFF) << (24 - i * 8);
}
return ipInt;
}
//檢查是否符合IP基本格式
public static boolean validateIPAddress(String ipStr) {
if (ipStr == null || ipStr.length() == 0) {
return false;
}
String pattern_str = "^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\.\n" +
"((1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\.){2}\n" +
"(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";
Pattern pattern = Pattern.compile(pattern_str);
Matcher matcher = pattern.matcher(ipStr);
return matcher.matches();
}
//檢查掩碼和相對應的IP是否匹配
public static boolean isLegalSubnetMask(String ip, String subnetMask) {
try {
if (ip.length() == 0 || !validateIPAddress(ip) || subnetMask.length() == 0)
return false;
int ip_int = IPtoInt(ip);
int subnetMask_int = IPtoInt(subnetMask);
int tmp = ip_int & (~subnetMask_int);
if (tmp == 0) {
return false; // not Net Service IDentity
} else if (tmp == (~subnetMask_int)) {
return false; // not broadcast
}
} catch (Exception e) {
return false;
}
return true;
}
}
中文字元:[\u4e00-\u9fa5]