游客:
注册
|
登录
|
帮助
网友俱乐部
»
网络编程
»
JAVA教程
» 正则表达式概述及在JAVA中的使用
网友生活网
|
网友学堂
如何获得金币?
诚招斑竹
IP归属地查询 PR查询 收录查询 whois查询
免费超短2级域名,your.jpy.cc
传世私服
|
传奇世界私服
注册亚洲交友中心,找个人来同居吧!
7CODE查杀恶意代码,守护您的电脑
‹‹ 上一主题
|
下一主题 ››
投票
交易
悬赏
活动
打印
|
推荐
|
订阅
|
收藏
标题:
[基础]
正则表达式概述及在JAVA中的使用
ljjk5
元帅
UID 46706
精华
1
积分 99426
帖子 49691
威望 554
金币 48489
热心 505
阅读权限 100
注册 2007-2-25
状态 离线
#1
使用道具
发表于 2007-12-31 13:06
资料
个人空间
主页
短消息
加为好友
正则表达式概述及在JAVA中的使用
概述
你是否使用过查找*.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等於[ x0Bf ]空白字符
S等於[^ x0Bf ]非空白字符
w等於[a-zA-Z_0-9]数字或是英文字
W等於[^a-zA-Z_0-9]非数字与英文字
$表示每行的结尾
.匹配所有字符,包括空格、Tab字符甚至换行符
|或
[]方括号只允许匹配单个字符
^符号称为“否”符号。如果用在方括号内,表示不想要匹配的字符。表示每行的开头
()形成一组
查询
importjava.util.regex.*;
publicclassRegexExample
{
publicstaticvoidmain(String[]args)
{
Stringstr="aaabcefgABC";
StringregEx="aaa|fff";
Patternp=Pattern.compile(regEx);//编译成模式
Matcherm=p.matcher(str);//创建一个匹配器
booleanrs=m.find();
if(rs)
{
System.out.println("include!!!");
}
else
{
System.out.println("noinclude!!!");
}
}
}
如果str中有regEx,那么rs为true,否则为flase。如果想在查找时忽略大小写,则可以写成Patternp=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);提取
(从本例给出所给完整路径中提取文件名)im()p(ortjava.util.rege
publicclassRegexExample2
{
publicstaticvoidmain(String[]args)
{
StringregEx=".+\(.+)$";
Stringstr="c:dir1dir2
ame.txt";
Patternp=Pattern.compile(regEx);
Matcherm=p.matcher(str);
booleanrs=m.find();
for(inti=1;i<=m.groupCount();i++)
{
System.out.println(m.group(i));
}
}
}
以上的执行结果为name.txt,提取的字符串储存在m.group(i)中,其中i最大值为m.groupCount();
分割
importjava.util.regex.*;
publicclassRegexExample3
{
publicstaticvoidmain(String[]args)
{
StringregEx="::";
Patternp=Pattern.compile(regEx);
String[]r=p.split("xd::abc::cde");
for(inti=0;i<r.length;i++)
{
System.out.println(r
);
}
}
}
执行后,r就是{“xd”,“abc”,“cde”},其实分割时还有跟简单的方法:
Stringstr="xd::abc::cde";
String[]r=str.split("::");
替换(删除)
importjava.util.regex.*;
publicclassRegexExample1
{
publicstaticvoidmain(String[]args)
{
StringregEx="a+";//表示一个或多个a
Patternp=Pattern.compile(regEx);
Matcherm=p.matcher("aaabbcedaccdeaa");
Strings=m.replaceAll("A");
System.out.println(s);
}
}
结果为"AbbcedAccdeA"
如果写成空串,既可达到删除的功能,比如:
Strings=m.replaceAll("");
结果为"bbced ccde"
网友
ljjk5
签名 - 网友社区
===
[广告]
免费域名(Free Subdomain)
免费空间(Free hosting)
PR查询(Google Pagerank)
投票
交易
悬赏
活动
控制面板首页
编辑个人资料
积分交易
公众用户组
好友列表
个人空间管理
基本概况
流量统计
客户软件
发帖量记录
论坛排行
主题排行
发帖排行
积分排行
在线时间
管理团队
管理统计
当前时区 GMT+8, 现在时间是 2008-9-7 12:06
信产部ICP备案:
京ICP备05066424号
北京市公安局网监备案:1101050648号
Powered by
Discuz!
5.5.0
TOP
清除 Cookies
-
联系我们
-
网友俱乐部
-
Archiver
-
WAP