正则表达式pattern和matcher,java中pattern详解
00-1010 1.正则表达式的应用2。常用正则表达式3贪婪匹配和懒惰匹配补充:其他一些用法总结
00-1010给用户发消息的时候,一般会有相同的消息模板,但是有些信息是和用户相关的,所以需要替换消息模板的可变部分。对于一个系统,可能有许多完全不同的模板集合。因此,需要一种根据实际信息替换消息模板中变量的通用方法。消息的变量与velcity中的变量相同。
publicstatic K,V String replaceholderwithmapvalue(String msg,MapK,V placeHolderMap){ pattern pattern=pattern.compile( $ *! {([ w]) } );matcher matcher=pattern . matcher(msg);MapString,String replace list=new HashMap();while(matcher . find()){ string placeholder=matcher . group(0);string key=matcher . group(1);object value=placeholdermap . get(key);如果(值!=null){ replace list . put(placeHolder,value . tostring());} } for(EntryString,String key value : replace list . entry set()){ msg=msg . replace(key value . getkey(),key value . getvalue());} returnmsg}方法,先获取所有需要替换的变量并存储在replaceList中,然后依次替换。上述方法的正则表达式中,([\w])表示捕获匹配的内容,捕获的值存储在matcher.group中,当然也可以有多次捕获。
00-1010 [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空白字符:[tnx0Bfr]
S非空白字符:[ s]
w单词字符:[a-zA-Z_0-9]
W非单词字符:[ w]
p{Lower}小写字母字符:[a-z]
p {大写字符:[A-Z]
x?x,一次或者根本没有。
X* X,零次或多次
x,一次或多次
X{n} X,正好n次。
X{n,} X至少n次
X{n,m} X,至少n次,但不超过m次。
(X) X,作为捕获组
非捕获
(?=X) X,通过零宽度的正向前瞻
(?X) X,通过零宽度的负前视
(?=X) X,通过零宽度的正向后视
(?X) X,通过零宽度的负后视
(?X) X,作为独立的非捕获组
00-1010考虑这个表达式:a.*b,它将匹配以A开头以b结尾的最长字符串,如果用它来搜索aabab,它将匹配整个字符串aabab。这就是所谓的贪婪匹配。
有时候,我们更需要懒匹配,也就是匹配尽可能少的字符。前面的限定词都可以转换成懒人匹配模式,后面加个问号就行了?这边走。*?意思是匹配任意次数的重复,但是在整个匹配能够成功的前提下使用最少的重复。
形容词(adjective的缩写)*?b匹配最短的字符串,以A开头,以b结尾,如果应用于aabab,将匹配aab和ab。
public static void main(string[]args){ string str=北京(海淀区)(朝阳区);字符串paternStr=。*(?=\();pattern pattern=pattern.compile(patern str);matcher matcher=pattern . matcher(str);if(matcher . find()){ system . out . println(matcher . group(0));}}以上方法的输出是:北京(海淀区)
public static void main(String[]args){ String str=北京市(海淀区)(朝阳区);字符串paternStr= .*?(?=\();模式模式=模式。编译(模式字符串);匹配器matcher=模式。matcher(str);如果(匹配器。find()){ system。出去。println(匹配器。组(0));}}上述方法输出:北京市
目录
模式分割(字符序列输入)
这个方法跟String.split()方法效果类似
模式p2=模式。编译([a-z]);//str的长度为2,返回我爱和哈哈,跟String[] arr=我爱爪哇岛哈哈.String[] arr=p2.split(我爱爪哇岛哈哈);数组.流(arr).forEach(系统。out :3360 println);模式匹配器(字符串正则表达式,字符序列输入)
一个静态方法,用于快速匹配字符串,该方法适合用于只匹配一次,且匹配全部字符串,效果与模式.编译(正则表达式)。匹配器(输入)。匹配()类似
模式p=模式。编译( d );//返回 d系统。出去。println(p . pattern());//p.pattern()返回d,这里为没错,只有当全部满足则为真正的系统。出去。println(模式。matches(p . pattern(), 2223 );//返回假的,只要一个不满足,则返回伪系统。出去。println(模式。matches(p . pattern(), 2223 b );
1. 正则表达式的应用
到此这篇关于爪哇中模式用法实例的文章就介绍到这了,更多相关正则表达式模式用法内容请搜索盛行信息技术以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行它!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。