,,Java中Pattern用法实例(正则表达式)

,,Java中Pattern用法实例(正则表达式)

在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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: