正则表达式及小例子
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
字符串处理是许多程序中非常重要的一部分,它们可以用于文本显示,数据表示,查找键和很多目的.在Unix下,用户可以使用正则表达式的强健功能实现
这些目的,从Java1.4起,Java核心API就引入了java.util.regex程序包,它是一种有价值的基础工具,可以用于很多类型的文本处理,如匹配,搜索,提取
和分析结构化内容.
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。它包括两个类:Pattern和Matcher.
Pattern是一个正则表达式经编译后的表现模式。在java中,通过适当命名的Pattern类可以容易确定String是否匹配某种模式.模式可以象匹配某个特
定的String那样简单,也可以很复杂,需要采用分组和字符类,如空白,数字,字母或控制符.因为Java字符串基于统一字符编码(Unicode),正则表达式也
适用于国际化的应用程序.
Pattern类的方法简述
方法说明
static Pettern compile(String regex,int flag)编译模式,参数regex表示输入的正则表达式,flag表示模式类型(Pattern.CASE_INSENSITIVE表示
不区分大小写)
Matcher match(CharSequence input)获取匹配器,input时输入的待处理的字符串
static boolean matches(String regex,CharSequence input)快速的匹配调用,直接根据输入的模式regex匹配input
String[]split(CharSequence input,int limit)分隔字符串input,limit参数可以限制分隔的次数
Matcher一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。首先一个Pattern实例订制了一个所用语法与
PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作。
Matcher类的方法简述
方法说明
boolean matches()对整个输入字符串进行模式匹配.
boolean lookingAt()从输入字符串的开始处进行模式匹配
boolean find(int start)从start处开始匹配模式
int groupCount()返回匹配后的分组数目
String replaceAll(String replacement)用给定的replacement全部替代匹配
String repalceFirst(String replacement)用给定的replacement替代第一次匹配的部分
Matcher appendReplacement(StringBuffer sb,String replacement)根据模式用replacement替换相应内容,并将匹配的结果添加到sb当前位置之后StringBuffer appendTail(StringBuffer sb)将输入序列中匹配之后的末尾字串添加到sb当前位置之后.
正则表达式中常见通配符:
对于单字符串比较而言,使用正则表达式没有什么优势.Regex的真正强大之处在于体现在包括字符类和量词(*,+,?)的更复杂的模式上.
字符类包括:
\d数字
\D非数字
\w单字字符(0-9,A-Z,a-z)
\W非单字字符
\s空白(空格符,换行符,回车符,制表符)
\S非空白
[]由方括号内的一个字符列表创建的自定义字符类匹配任何单个字符
下面的字符将用于控制将一个子模式应用到匹配次数的过程.
?重复前面的子模式0次到一次
*重复前面的子模式0次或多次
+重复前面的子模式一次到多次
匹配中文字符的正则表达式:[\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)String.prototype.len=function(){return
this.replace([^\x00-\xff]/g,"aa").length;}
匹配空行的正则表达式:\n[\s|]*\r
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*)\/>/
匹配首尾空格的正则表达式:(^\s*)|(\s*$)
以下是实例部分:
实例一:
正则式是最简单的能准确匹配一个给定String的模式,模式与要匹配的文本是等价的.静态的Pattern.matches方法用于比较一个String是否匹配一个给定模式.例程如下:
String data="java";
boolean result=Pattern.matches("java",data);
true
实例二:
String[]dataArr={"moon","mon","moon","mono"};
String patternStr="m(o+)n";
boolean result=false;
for(String str:dataArr){
result=Pattern.matches(patternStr,str);
if(result){
System.out.println("字符串"+str+"匹配模式"+patternStr+"成功");
}else{
System.out.println("字符串"+str+"匹配模式"+patternStr+"失败");
}
}
输出:
字符串moon匹配模式m(o+)n成功
字符串mon匹配模式m(o+)n成功
字符串moon匹配模式m(o+)n成功
字符串mono匹配模式m(o+)n失败
模式是”m(o+)n”,它表示mn中间的o可以重复一次或多次,因此moon,mon,mooon能匹配成功,而mono在n后多了一个o,和模式匹配不上.
注:+表示一次或多次;?表示0次或一次;*表示0次或多次.
实例三:
String[]dataArr={"ban","ben","bin","bon","bun","byn","baen"};
String patternStr="b[aeiou]n";
boolean result=false;
for(String str:dataArr){
result=Pattern.matches(patternStr,str);
if(result){
System.out.println("字符串"+str+"匹配模式"+patternStr+"成功");