版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第Java中Pattern用法实例(正则表达式)目录1.正则表达式的应用2.常用正则表达式3贪婪匹配与懒惰匹配补充:其它的一些用法总结
1.正则表达式的应用
在给用户发送消息时通常情况会有相同的消息模板,但其中部分信息跟用户相关,因此需要对消息模板中的变量部分进行替换。而对于一个系统而言可能有很多套完全不同的模板。因此需要一个通用的根据实际信息替换消息模板中变量的方法。消息模板的变量与velcity中的变量规范相同。
publicstaticK,VStringreplacePlaceHolderWithMapValue(Stringmsg,MapK,VplaceHolderMap){
Patternpattern=Ppile("\\$*!\\{([\\w]+)\\}");
Matchermatcher=pattern.matcher(msg);
MapString,StringreplaceList=newHashMap();
while(matcher.find()){
StringplaceHolder=matcher.group(0);
Stringkey=matcher.group(1);
Objectvalue=placeHolderMap.get(key);
if(value!=null){
replaceList.put(placeHolder,value.toString());
for(EntryString,StringkeyValue:replaceList.entrySet()){
msg=msg.replace(keyValue.getKey(),keyValue.getValue());
returnmsg;
方法中先获取所有的需要替换的变量存入replaceList中,然后再依次替换。上述方法的正则表达式中,([\\w]+)表示对匹配的内容中进行捕获,捕获值存入matcher.group中,当然也可以有多个捕获。
2.常用正则表达式
[abc]a、b或c(简单类)
[^abc]任何字符,除了a、b或c(否定)
[a-zA-Z]a到z或A到Z,两头的字母包括在内(范围)
[a-d[m-p]]a到d或m到p:[a-dm-p](并集)
[a-z[def]]d、e或f(交集)
[a-z[^bc]]a到z,除了b和c:[ad-z](减去)
[a-z[^m-p]]a到z,而非m到p:[a-lq-z](减去)
.任何字符(与行结束符可能匹配也可能不匹配)
\d数字:[0-9]
\D非数字:[^0-9]
\s空白字符:[\t\n\x0B\f\r]
\S非空白字符:[^\s]
\w单词字符:[a-zA-Z_0-9]
\W非单词字符:[^\w]
\p{Lower}小写字母字符:[a-z]
\p{Upper}大写字母字符:[A-Z]
XX,一次或一次也没有
X*X,零次或多次
X+X,一次或多次
X{n}X,恰好n次
X{n,}X,至少n次
X{n,m}X,至少n次,但是不超过m次
(X)X,作为捕获组
非捕获
(=X)X,通过零宽度的正lookahead
(!X)X,通过零宽度的负lookahead
(=X)X,通过零宽度的正lookbehind
(!X)X,通过零宽度的负lookbehind
(X)X,作为独立的非捕获组
3贪婪匹配与懒惰匹配
考虑这个表达式:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。
有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号。这样.*就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。
a.*b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab和ab。
publicstaticvoidmain(String[]args){
Stringstr="北京市(海淀区)(朝阳区)";
StringpaternStr=".*(=\\()";
Patternpattern=Ppile(paternStr);
Matchermatcher=pattern.matcher(str);
if(matcher.find()){
System.out.println(matcher.group(0));
上述方法的输出为:北京市(海淀区)
publicstaticvoidmain(String[]args){
Stringstr="北京市(海淀区)(朝阳区)";
StringpaternStr=".*?(=\\()";
Patternpattern=Ppile(paternStr);
Matchermatcher=pattern.matcher(str);
if(matcher.find()){
System.out.println(matcher.group(0));
上述方法输出:北京市
补充:其它的一些用法
Pattern.split(CharSequenceinput)
这个方法跟String.split()方法效果类似
Patternp2=Ppile("[a-z]+");
//str的长度为2,返回"我爱"和"哈哈",跟String[]arr="我爱java哈哈".
String[]arr=p2.split("我爱java哈哈");
Arrays.stream(arr).forEach(System.out::println);
Pattern.matcher(Stringregex,CharSequenceinput)
一个静态方法,用于快速匹配字符串,该方法适合用于只匹配一次,且匹配全部字符串,效果与Ppile(regex).matcher(input).matches()类似
Patternp=Ppile("\\d+");
//返回\d+
System.out.println(p.pattern());
//p.pattern()返回\d+,这里为true,只有当全部满足则
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论