正则表达式
2016-03-26 09:19
232 查看
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); } }
相关文章推荐
- 玩转微信2次开发1_交互通信api.php(微擎版)
- LightOJ 1064 Throwing Dice
- Android的adb使用
- final关键字的作用
- redis主从复制
- Android开发工具
- C++第二次作业
- Java之面向对象相关问题集
- 网络基础:IP地址分类
- awk字符串函数及其意义
- 第四周学习进度条
- android SDK 国内镜像
- C++精进篇(八)之―函数重定义、重载、重写
- awk字符串函数及其意义
- C++精进篇(七)之―操作符重载
- C++精进篇(六)之― Vector、iterator、Array
- 写给准备参加秋招的学弟学妹们~一定要来看哦~
- Delphi检查GetElementByID返回值的有效性
- 洛谷 shlqsh数
- hashCode与equals的区别与联系