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

云之南

风声,雨声,读书声,声声入耳;家事,国事,天下事,事事关心

 
 
 

日志

 
 
关于我

专业背景:计算机科学 研究方向与兴趣: JavaEE-Web软件开发, 生物信息学, 数据挖掘与机器学习, 智能信息系统 目前工作: 基因组, 转录组, NGS高通量数据分析, 生物数据挖掘, 植物系统发育和比较进化基因组学

网易考拉推荐

正则表达式的概述及在JAVA中的使用方法  

2010-11-12 14:52:31|  分类: java-j2ee |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

正则表达式的作用

提供更强大的字符串处理能力,测试字符串内的模式,例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或身份证号码模式。即数据验证替换文本可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。

基于模式匹配从字符串中提取子字符串可以查找文档内或输入域内特定的文本。

在Java中使用正则表达式

正则表达式在字符串处理上有着强大的功能,sun在jdk1.4加入了对它的支持,jdk1.4中加入了java.util.regex包提供对正则表达式的支持。而且Java.lang.String类中的replaceAll和split函数也是调用的正则表达式来实现的。

正则表达式对字符串的操作主要包括:

1.字符串匹配

2.指定字符串替换

3.指定字符串查找

4.字符串分割

Pattern类

Pattern类的实例表示以字符串形式指定的正则表达式,其语 法类似于Perl所用的语法。

用字符串形式指定的正则表达式,必须先编译成Pattern类的 实例。生成的模式用于创建Matcher对象,它根据正则表达式与任 意字符序列进行匹配。多个匹配器可以共享一个模式,因为它是非专属的。

用compile方法把给定的正则表达式编译成模式,然后用 matcher方法创建一个匹配器,这个匹配器将根据此模式对给定输 入进行匹配。pattern 方法可返回编译这个模式所用的正则表达式。

Matcher类

通过调用某个模式的matcher方法,从这个模式生成匹配器。 匹配器创建之后,就可以用它来执行三类不同的匹配操作:

matches方法根据此模式,对整个输入序列进行匹配。

lookingAt方法根据此模式,从开始处对输入序列进 行匹配。

find方法扫描输入序列,寻找下一个与模式匹配的地方。

这些方法都会返回一个表示成功或失败的布尔值。假如匹配成功,通过查询 匹配器的状态,可以获得更多的信息。

构建正则表达式

\d 等於 [0-9] 数字

\D 等於 [^0-9] 非数字

\s 等於 [ \t\n\x0B\f\r] 空白字符

\S 等於 [^ \t\n\x0B\f\r] 非空白字符

\w 等於 [a-zA-Z_0-9] 数字或是英文字

\W 等於 [^a-zA-Z_0-9] 非数字与英文字

$ 表示每行的结尾

. 匹配所有字符,包括空格、Tab字符甚至换行符

或 []方括号只答应匹配单个字符

^ 符号称为否符号。假如用在方括号内,表示不想要匹配的字符。 表示每行的开头

( ) 形成一组

查询

import java.util.regex.*; 
public class RegexExample 
{ 
public static void main(String[] args) 
{ 
String str="aaabc efg ABC"; 
String regEx="aaafff"; 
Pattern p=Pattern.compile(regEx);//编译成模式 
Matcher m=p.matcher(str);//创建一个匹配器 
boolean rs=m.find(); 
if(rs) 
{ 
System.out.println("include!!!"); 
} 
else 
{ 
System.out.println("no include!!!"); 
} 
} 
}

匹配多个空格:

String regEx="^ +$";

 

假如str中有regEx,那么rs为true,否则为flase。假如想在查找时忽略大小写,

则可以写成Pattern p=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);

提取 (从本例所给完整路径中提取文件名)

import java.util.regex.*;
public class RegexExample2 
{ 
public static void main(String[] args) 
{ 
String regEx=".+\\\\(.+)$"; 
String str="c:\\dir1\\dir2\\name.txt"; 
Pattern p=Pattern.compile(regEx); 
Matcher m=p.matcher(str); 
boolean rs=m.find(); 
for(int i=1;i<=m.groupCount();i++) 
{ 
System.out.println(m.group(i)); //括号内匹配内容
} 
} 
}

以上的执行结果为name.txt,提取的字符串储存在m.group(i)中,其中i最大值为m.groupCount();

分割

import java.util.regex.*; 
public class RegexExample3 
{ 
public static void main(String[] args) 
{ 
String regEx="::"; 
Pattern p=Pattern.compile(regEx); 
String[] r=p.split("xd::abc::cde"); 
for(int i=0;i<r.length;i++) 
{ 
System.out.println(r[i]); 
} 
} 
}

执行后,r就是{xd,abc,cde},其实分割时还有跟简单的方法:

String str="xd::abc::cde";

String[] r=str.split("::");

替换(删除)

import java.util.regex.*; 
public class RegexExample1 
{ 
public static void main(String[] args) 
{ 
String regEx="a+";//表示一个或多个a 
Pattern p=Pattern.compile(regEx); 
Matcher m=p.matcher("aaabbced a ccdeaa"); 
String s=m.replaceAll("A"); 
System.out.println(s); 
} 
}

结果为"Abbced A ccdeA"

假如写成空串,既可达到删除的功能,比如:

String s=m.replaceAll("");

结果为"bbced ccde"

  评论这张
 
阅读(866)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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