java核心技术之正则表达式

来源:互联网 发布:提花图案软件 编辑:程序博客网 时间:2024/05/16 00:43

这里写图片描述

1.正则表达式

正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE)。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串

2.元字符:

元字符 正则表达式的写法 意义 . “.” 任意一个字符 ^ “^Spring” 以Spring开始的字符 $ “EEEE$” 匹配行结束符,以”EEEE”结束的字符 \d “\d” 0-9的任何一个数字 \D “\D” 任何一个非数字字符 \s “\s” 空白字符,如”\t”,”\n” \S “\S” 非空白字符 \w “\w” 可用作标识符的字符,但不包括“$” \W “\W” 不可用作标识符的字符 \p{Lower} \p{Lower} 小定字母a-z \p{Upper} \p{Upper} 大写字母A-Z \p{ASCII} \p{ASCII} ASCII字符 \p{Alpha} \p{Alpha} 字母字符 \p{Digit} \p{Digit} 十进制数字,0-9 \p{Alnum} \p{Alnum} 数字或字母字符 \p{Punct} \p{Punct} 标点符号:!“#%&()*=- \p{Graph} \p{Graph} 可见字符:[\p{Alnum}\p{Punct}] \p{Print} \p{Print} 可打印字符[\p{Graph}\x20] \p{Blank} \p{Blank} 空格或制表符:[\t] \p{Cntrl} \p{Cntrl} 控制字符:[\x00-\x1F\x7F]

3.方括号

方括号括起来若干个字符来表示一个元字符,该元字符可代表方括号中的任何一个字符。
reg=“[abc]4”—– 则”a4”,”b4”,”c4”,都是和此正则表达式匹配的字符串

方括号例子 意义 [^456] 代表4,5,6之外的任何字符 [a-r] 代表a~r中的任何一个字母 [a-Za-Z] 代表任意一个英文字母 [a-e[g-z]] 代表a~e或g~z中的任意一个字母 [a-o&&[def]] 代表字母d,e,f(交运算) [a-o&&[^bc]] 代表字母a,d(差运算)

4.()–小括号

将 () 之间括起来的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域,这个元字符在字符串提取的时候非常有用。

5.限定修饰符

使用限定修饰符来限定元字符出现的次数

限定修饰符 意义 示例 ? 0次或1次 A? * 0次或多次 A* + 1次或多次 A+ {n} 正好出现n次 A{2} {n,} 至少出现n次 A{2,} {n,m} 出现n到m次 A{2,6}

6.几个样例

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

public class Regular {
//字符串是否是数字
public static String regexIsDigital = “\d+”;
//字符串是否是字母
public static String regexIsAlpha =”\p{Alpha}+”;
//字符串是否是15位或18位的身体证号码
public static String regexIsID=”\d{15}|\d{18}”;
//字符串是否是JJJ开头KKK结尾
public static String regexIsJJJStartKKKEnd=”^JJJ.*KKK$”;
//字符串是否是区号是3或4位数字-(可有可没有)号码任意多少位的数字
public static String regexIsTelePhoneNumber =”[0-9]{3,4}\-?[0-9]+”;
//X@X.com.cn
public static String regexIsEmail = “\w+@\w+(\.\w{2,3})*\.\w{2,3}”;
//字符串是否是汉字
public static String regexIsHanZi=”[\u4e00-\u9fa5]{1,}”;
//查找以Java开头,任意结尾的字符串
public static String regexIsStartJava = “^Java.*”;
//以多条件分割字符串时
public static String regexSplit =”[, |]+”;

public static void main(String[] args) {   testIsDigit();   testIsAlpha();   testIsID();   testStartEnd();   testIsTelePhoneNum();   testEmailAddre();   testIsHanZi();                 testIsStartJava();   testSplit();                 testReplace();   testPattern(); } private static void testPattern() {     Pattern pattern = Pattern.compile("");     System.out.println(pattern.matches("[0-9]{6}", "200038"));      System.out.println(pattern.matches("\\d{6}", "200038"));  }private static void testReplace() {     Pattern pattern = Pattern.compile("正则表达式");     Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");     //替换第一个符合正则的数据     System.out.println(matcher.replaceFirst("Java"));     pattern = Pattern.compile("正则表达式");     matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");       //替换所有符合正则的数据       System.out.println(matcher.replaceAll("Java"));     } private static void testSplit() {     Pattern pattern = Pattern.compile(regexSplit);     String data = "Java Hello World  Java,Hello,,World|Sun";     System.out.println(data+" split by:"+regexSplit);     String[] strs = pattern.split(data);     for (int i=0;i<strs.length;i++) {         System.out.println(strs[i]);     } } private static void testIsStartJava() {             pressInfoByPattern("Java不是人",regexIsStartJava);     pressInfoByPattern("dJava不是人",regexIsStartJava); } private static void testIsHanZi() {     pressInfo("验证汉字",regexIsHanZi); } private static void testIsTelePhoneNum() {     pressInfo("0733-5544",regexIsTelePhoneNumber);     pressInfo("073-566544",regexIsTelePhoneNumber);     pressInfo("073566544",regexIsTelePhoneNumber);     pressInfo("073--566544",regexIsTelePhoneNumber); } private static void testStartEnd() {     pressInfo("JJJKKK",regexIsJJJStartKKKEnd);     pressInfo("JJJaaaaKKK",regexIsJJJStartKKKEnd);       pressInfo("JJaaaaKKK",regexIsJJJStartKKKEnd);     pressInfo("JJJaaaaKK",regexIsJJJStartKKKEnd); } private static void testIsID() {                   pressInfo("111111111111111",regexIsID);     pressInfo("11111111111111",regexIsID);          pressInfo("111111111111122221",regexIsID);     pressInfo("11111111111112222",regexIsID);                  } private static void testIsAlpha() {     pressInfo("da",regexIsAlpha);     pressInfo("d1a",regexIsAlpha); } private static void testIsDigit() {               pressInfo("21452",regexIsDigital);     pressInfo("21a452",regexIsDigital);     pressInfo("021452",regexIsDigital); } private static void testEmailAddre() {                           pressInfo("aaa@",regexIsEmail);     pressInfo("aaaaaaaa",regexIsEmail);     pressInfo("11111@11111fffyu.dfg.com",regexIsEmail);                 } private static void pressInfo(String data,String regex) {                 if(data.matches(regex)){         System.out.println(data+":is match regex:"+regex);     }else{         System.out.println(data+":is not match regex:"+regex);     } } private static void pressInfoByPattern(String data,String regex) {                   Pattern pattern = Pattern.compile(regex);     Matcher matcher = pattern.matcher(data);     if(matcher.matches()){         System.out.println(data+":is match regex:"+regex);     }else{         System.out.println(data+":is not match regex:"+regex);     } }

}

7自己的话

曾经,看到别人能用正则表达式,而自己不会,当时好自卑啊,觉得别人好厉害啊。直到后来,自己坐下来,好好的看了一些正则表达式的资料和例子后,觉得,啊,原来如此。也就是这样,一点都不复杂啊。绝知此事要躬行,古人的话还是有道理的。

0 0
原创粉丝点击