在java.util.regex包中,它是正则表达式的编译表示。这个类的实例是不可变的,可以被多个并发线程安全地使用。下面这篇文章主要介绍Java正则表达式模式用法的相关信息,有需要的可以参考一下。
:
目录
1.正则表达式的应用2。常用正则表达式3贪婪匹配和懒惰匹配补充:其他一些用法总结
1. 正则表达式的应用
在给用户发送消息的时候,一般会有相同的消息模板,但是有些信息是和用户相关的,所以需要替换消息模板中的可变部分。对于一个系统,可能有许多完全不同的模板集合。因此,需要一种根据实际信息替换消息模板中变量的通用方法。消息的变量与velcity中的变量相同。
publicstatic K,V String replace holder withmapvalue(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) {
replaceList.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中,当然也可以有多次捕获。
2. 常用正则表达式
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 {大写字符:[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,作为独立的非捕获组
3 贪婪匹配与懒惰匹配
考虑这个表达式:a.*b,它将匹配以A开头以b结尾的最长字符串,如果用它来搜索aabab,它将匹配整个字符串aabab。这就是所谓的贪婪匹配。
有时候,我们更需要懒匹配,也就是匹配尽可能少的字符。前面的限定词都可以转换成懒人匹配模式,后面加个问号就行了?这边走。*?意思是匹配任意次数的重复,但是在整个匹配能够成功的前提下使用最少的重复。
a.*?b匹配最短的字符串,以A开头,以b结尾,如果应用于aabab,将匹配aab和ab。
公共静态void main(String[] args) {
String='北京(海淀区)(朝阳区)';
字符串paternStr='。*(?=\\()';
pattern pattern=pattern . compile(patern str);
matcher matcher=pattern . matcher(str);
if (matcher.find()) {
system . out . println(matcher . group(0));
}
}
上述方法的输出是:北京(海淀区)
公共静态void main(String[] args) {
String='北京(海淀区)(朝阳区)';
字符串paternStr='。*?(?=\\()';
pattern pattern=pattern . compile(patern str);
matcher matcher=pattern . matcher(str);
if (matcher.find()) {
system . out . println(matcher . group(0));
}
}
上述方法的输出:北京
补充:其它的一些用法
Pattern.split(字符序列输入)
此方法类似于String.split()方法。
模式p2=pattern . compile('[a-z]');
str的长度为2,返回'我爱'和'哈哈',后面是String[] arr='我爱java哈哈'。
String[] arr=p2.split('我爱java哈哈');
数组. stream(arr)。forEach(system . out:println);
Pattern.matcher(字符串正则表达式,字符序列输入)
静态方法用于快速匹配字符串。这种方法适合所有字符串只匹配一次,效果类似于pattern.pile (regex)。匹配器(输入)。匹配()
pattern p=pattern . compile(' \ \ d ');
//返回\d
system . out . println(p . pattern());
//p.pattern()返回\d,其中为真,只有全部满足才为真。
system . out . println(pattern . matches(p . pattern(),' 2223 ');
//返回false,只要有一个不满意,就返回false
system . out . println(pattern . matches(p . pattern(),' 2223 b ');
总结
关于Java中模式的使用示例的文章到此结束。有关正则表达式模式用法的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。