分享
 
 
 

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

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

概述

你是否使用过查找*.tmp临时文件

你是否使用过编辑工具中的查找/替换功能

其实它们都使用了正则表达式

正则表达式的作用

提供更强大的字符串处理能力

测试字符串内的模式

例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或身份证号码模式。即数据验证

替换文本

可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。

基于模式匹配从字符串中提取子字符串

可以查找文档内或输入域内特定的文本。

在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!!!");

}

}

}

假如str中有regEx,那么rs为true,否则为flase。假如想在查找时忽略大小写,则可以写成Pattern p=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);

提取

(从本例给出所给完整路径中提取文件名)im()p(ort java.util.rege

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("");

结果为"bbcedccde"

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有