您的位置:首页 > 其它

正则表达式的三种模式

2018-03-08 10:52 120 查看

概述:

正则表达式的匹配模式分为三种:贪婪模式Greedy(默认)、勉强模式Reluctant侵占模式Possessive。下面将会分别做出具体的讲述。

贪婪模式:

在匹配的过程中,尽可能多的去选择匹配内容,然后逐个递减,直到匹配成功。

例如:待匹配字符串为aweiaaaaaaaaaaaaawei,匹配正则表达式p0为 “ .*wei ”。

首先p0可分为,p1(.*)和子模式p2(wei)两个部分. 其中p1中的量词匹配方式使用默认方式(贪婪型)。

匹配过程:

1. 所有字符aweiaaaaaaaaaaaaawei匹配p1,匹配成功,剩余空字符匹配p2,匹配失败,整体匹配失败。

2. 字符aweiaaaaaaaaaaaaawe匹配p1,匹配成功,剩余字符 i匹配p2,匹配失败,整体匹配失败。

3. 字符aweiaaaaaaaaaaaaaw匹配p1,匹配成功,剩余字符 ei匹配p2,匹配失败,整体匹配失败。

4. 字符aweiaaaaaaaaaaaaa匹配p1,匹配成功,剩余字符 wei匹配p2,匹配成功,整体匹配成功。

public static void main(String[] args) {
// TODO Auto-generated method stub
String content = "aweiaaaaaaaaaaaaawei";
String regex = ".*wei";
Pattern pattern = Pattern.compile(regex);
Matcher matcher =pattern.matcher(content);
while(matcher.find()){
System.out.println("匹配结果:"+matcher.group());

}

}


输出:

匹配结果:aweiaaaaaaaaaaaaawei

勉强模式:

在匹配的过程中,首先尽可能少的去匹配,然后逐个增加,直到匹配成功。

例如:待匹配字符串为aweiaaaaaaaaaaaaawei,匹配正则表达式p0为 “ .*?wei ”。

首先p0可分为,p1(.*?)和子模式p2(wei)两个部分. 其中p1中的量词匹配方式使用(勉强模式)。

1. 空字符匹配p1,匹配成功,字符aweiaaaaaaaaaaaaawei匹配p2,匹配失败,整体匹配失败。

2. 字符a匹配p1,匹配成功,字符weiaaaaaaaaaaaaawei匹配p2,匹配成功(wei),整体匹配成功。

public static void main(String[] args) {
// TODO Auto-generated method stub
String content = "aweiaaaaaaaaaaaaawei";
String regex = ".*?wei";
Pattern pattern = Pattern.compile(regex);
Matcher matcher =pattern.matcher(content);
while(matcher.find()){
System.out.println("匹配结果:"+matcher.group());

}

}


输出:

匹配结果:awei

匹配结果:aaaaaaaaaaaaawei

说明:p2使用贪婪模式匹配,weiaaaaaaaaaaaaawei的匹配过程,weiaaaaaaaaaaaaawei匹配失败,weiaaaaaaaaaaaaawe匹配失败…直到wei匹配成功。最终匹配的结果是awei字符。

侵占模式:

在匹配的过程中,尽可能多的去匹配,一旦匹配成功,就不会改变。

例如:待匹配字符串为aweiaaaaaaaaaaaaawei,匹配正则表达式p0为 “ .*+wei ”。

首先p0可分为,p1(.*+)和子模式p2(wei)两个部分. 其中p1中的量词匹配方式使用(勉强模式)。

1. 字符aweiaaaaaaaaaaaaawei匹配p1,匹配成功,空字符匹配p2,匹配失败,整体匹配失败。

public static void main(String[] args) {
String content = "aweiaaaaaaaaaaaaawei";
String regex = ".*+wei";
Pattern pattern = Pattern.compile(regex);
Matcher matcher =pattern.matcher(content);
//matcher.matches()
if(matcher.find()){
System.out.println("匹配结果:"+matcher.group());

}else{
System.out.println("匹配失败");
}

}


希望对您有所帮助!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: