注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

程序员小站

J2EE丨Spring | JVM | Scala

 
 
 

日志

 
 

正则表达式总结(一)  

2012-04-15 21:13:14|  分类: java技巧 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

1.通过Pattern的compile()工厂方法创建一个Pattern的实例,将正则式传递给compile(),该正则式描述了匹配的模式;
2.通过Pattern的matcher()方法,创建一个包含字符串的Matcher对象;
3.调用Matcher的find()方法,查找匹配,匹配成功返回true,失败放回false;
4.如果find成功,则对Matcher调用group()方法,获得匹配序列。

/**
* 测试正则表达式匹配成功或失败
*/
Pattern pattern = Pattern.compile("\\bjava\\b");
Matcher matcher = pattern.matcher("java");
System.out.println(matcher.find());
输出:true

/**
* matcher group() 得到匹配到的字符串
* outprint:
* match: tomcat@XYZ.com
* match: jboss@XYZ.com
* match: weblogic@XYZ.com
*/

Pattern pattern = Pattern.compile("\\b\\w+@XYZ\\.com\\b"); //匹配 @XYZ.com 邮箱
Matcher matcher = pattern.matcher("tomcat tomcat@XYZ.com "
+"jboss jboss@XYZ.com "
+"weblogic weblogic@XYZ.com");
while(matcher.find())
System.out.println("match: " + matcher.group());

有了上面的基础后我们开始进入我们的主题。

/**
* 首先构造一个方法,方面我们下面的测试
* @param regex 正则表达式
* @param s 要匹配的字符串
* @return 匹配成功或失败
*/
public boolean match(String regex,String s){
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(s);
System.out.println(matcher.find());
return matcher.find();
}

/**
* 字符类
*/
@Test
public void test1(){
System.out.println(match("\\d","1")); //数字
System.out.println(match("\\D","e")); //非数字
System.out.println(match("\\s"," \n \b")); //空白符
System.out.println(match("\\S","java")); //非空白符
System.out.println(match("\\w","et")); //字母数字下划线
System.out.println(match("\\W","%^&#$(")); //非字母数字下划线
System.out.println(match("\\p{Lower}","Name")); //包含小写字母
System.out.println(match("\\p{Upper}","Name")); //包含大写字母
System.out.println(match("\\p{Punct}",".")); //包含标点符号
System.out.println(match("[^A-Z]","m")); //^有非的意思,也匹配开始
System.out.println(match("[\\w&&[^A-Z]]","m")); //&&交集
System.out.println(match("[[abc][123]]","a")); //并集
}


/**
* 通配符 .
*/
@Test
public void test2(){
System.out.println(match(".","ddjoij")); //.任意字符
System.out.println(match("."," ")); //.任意字符,没有不行,不匹配行结束符
System.out.println(match("over\\.","over.")); //预定义字符转义
}


/**
* 量词
* + 一次或多次
* ? 零次或一次
* * 零次或多次
*/
@Test
public void test3(){
System.out.println(match("x+","xxxx")); //一次或多次
System.out.println(match("x?","x")); //零次或一次
System.out.println(match("x?","")); //
System.out.println(match("x*","")); //零次或多次
System.out.println(match("a{2}","aa")); //两次
System.out.println(match("a{2,}","aaa")); //至少两次
System.out.println(match("a{2,5}","aaa")); //2-5次
}


/**
* 贪婪量词 .+ 匹配最长的串
* 胁迫量词 .+? 匹配最短的串
* 占有量词 .++
*/
@Test
public void test4(){
String s = "sample sample";
System.out.println(match("s.+e",s)); //匹配sample sample
System.out.println(match("s.+?e",s)); //匹配sample
System.out.println(match("s.++e",s)); //占有最后面的e不会释放,匹配失败
}


/**
* 边界通配符 \^ \$
* \A 字符串开始
* \b 单词边界
* \B 非单词边界
* \G 前一匹配结尾
* \Z 字符串结尾(不包括行终止符)
* \z 字符串结尾(包括行终止符)
*/
@Test
public void test5(){
System.out.println(match("\\w*love\\w*","I love you"));
System.out.println(match("^like.","like football"));
System.out.println(match("^like.?","like2"));
System.out.println(match(".*like$","i like"));
}



/**
* OR
*/
@Test
public void test6(){
System.out.println(match("\\w+\\s+(may|might)\\s+\\w+\\b","i may go school"));
}


/**
* 组 \1 \2
* .?! 不是结尾
*/
@Test
public void test7(){
//匹配单词及单词复数形式,比如apple 和 apples
System.out.println(match("\\b(\\w+)\\b[^.?!]*?\\1s","i have a apple,but he have two apples"));
System.out.println(match("\\b(\\w+)\\b.*\\1s$","i have a apple,but he have two apples"));
}

/**
* 标志序列 构造器(?f)其中f是设置的标志
* d 开启UNIX行模式
* i 忽略大小写
* m 启用多行模式
* s 开启全点模式,.将匹配所有字符,包括行结束符
* u 与i结合使用,不区分大小写的匹配通过Unicode匹配,而不是只假设为ASCII字符
* x 忽略空白字符和#注释
*/
@Test
public void test8(){
System.out.println(match("(?i)like","LIke")); //like 都忽略大小写
System.out.println(match("li(?i)ke","liKE")); //ke 忽略大小写
Pattern p = Pattern.compile("like",Pattern.CASE_INSENSITIVE); //表示整体都忽略大小写
System.out.println(p.matcher("LIKE").find());
}

  评论这张
 
阅读(339)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018