正则表达式的三种模式
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("匹配失败"); } }
希望对您有所帮助!
相关文章推荐
- 正则表达式-量词的三种模式
- 正则表达式的三种模式【贪婪、勉强、侵占】的分析
- 正则表达式-量词的三种模式
- Java 正则表达式 量词 --- 三种匹配模式【贪婪型、勉强型、占有型】
- JAVA 正则表达式的三种模式: 贪婪, 勉强和占有的讨论
- 正则表达式的三种模式
- Java 正则表达式 量词 --- 三种匹配模式【贪婪型、勉强型、占有型】
- 【转载】JAVA正则表达式的三种模式的区别-greedy reluctant possessive
- Java 正则表达式 量词 --- 三种匹配模式【贪婪型、勉强型、占有型】
- 正则表达式的三种模式【贪婪、勉强、侵占】的分析
- Java 正则表达式 量词 --- 三种匹配模式【贪婪型、勉强型、占有型】
- 正则表达式的贪婪与非贪婪模式
- 正则表达式在IOS中的应用及IOS中三种正则表达式的使用与比较
- 正则表达式模式修正符(/ies)
- 正则表达式、分组、子匹配(子模式)、非捕获子匹配(子模式)
- scala模式匹配和正则表达式
- PHP正则表达式模式修正符
- 正则表达式笔记 3 贪婪、勉强、独占三种匹配量词
- PHP正则表达式的逆向引用与子模式分析
- 正则表达式-匹配模式