import java.util.regex.Matcher;
import java.util.regex.Pattern;public class RegexDemo2 {
public static void main(String args[]) {
Demo2(); } private static void getDemo() {
// TODO Auto-generated method stub
String str = "ming tian jiuyao fang jia le,da jia";
String reg = "\\b[a-z]{4}\\b";
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(str);
while (m.find()) {
System.out.println(m.group());
System.out.println(m.start() + "..." + m.end());
}
} private static void Demo2() { String str="008.109.090.030";
String reg="0+(\\d+)";//Greedy 数量词
Pattern p=Pattern.compile(reg);
Matcher m=p.matcher(str);
while( m.find() ){
System.out.print(m.group()+"--->");
int len= m.groupCount();
System.out.print(len+"-----");
for(int i=0;i<=1;i++){
System.out.print("group"+"("+i+"):"+m.group(i)+" ");
}
System.out.println(" ");
}
System.out.println("++++++++++++++++++++++++++++++++++++++");
String str1="008.109.090.030";
String reg1="0+(\\d+?)";//Reluctant 数量词
Pattern p1=Pattern.compile(reg1);
Matcher m1=p1.matcher(str1);
while( m1.find() ){
System.out.print(m1.group()+"--->");
int len= m1.groupCount();
System.out.print(len+"-----");
for(int i=0;i<=1;i++){
System.out.print("group"+"("+i+"):"+m1.group(i)+" ");
}
System.out.println(" ");
}
}
}结果:
008--->1-----group(0):008 group(1):8
09--->1-----group(0):09 group(1):9
090--->1-----group(0):090 group(1):90
030--->1-----group(0):030 group(1):30
++++++++++++++++++++++++++++++++++++++
008--->1-----group(0):008 group(1):8
09--->1-----group(0):09 group(1):9
09--->1-----group(0):09 group(1):9
03--->1-----group(0):03 group(1):3 为什么结果不一样和为什么会出现这样的结果,求解释。
解决方案 »
- 怎样显示滚动条,帮我看看我的代码那里出现问题?
- maven 能够像 ant 那样之间从 java 类生成 .hbm 映射文件吗?
- 求TextMining的下载!!!!!!!!!顶者有分!!!!!!!!
- java怎么向命令行程序传递参数啊?(100求助)
- java的调用方式到底是怎样的?
- 我在往Sqlsever里面写数据的时候,数据已经写到数据库了,可是还是报rs.executeQuery:[Microsoft][SQLServer 2000 Driver for JDBC]No Re
- 寻求用户权限设计例子!!
- 大家好!问一个关于package和import的问题
- 有没有人做过下载并安装,完全自动,怎么做?
- 还是想。。。
- 反编译jar包修改了里面的java文件如何编译回去啊?
- Java socket作为客户端连接mina server(银联多渠道离线仿真模拟器)
008--->1-----group(0):008 group(1):8
09--->1-----group(0):09 group(1):9
090--->1-----group(0):090 group(1):90
030--->1-----group(0):030 group(1):30
这个表达式的匹配规则就是0开头的数字字符串,表达式’\\d‘表示数字匹配,‘+’表示一次或多次匹配前面的字符
++++++++++++++++++++++++++++++++++++++
String reg1="0+(\\d+?)"
008--->1-----group(0):008 group(1):8
09--->1-----group(0):09 group(1):9
09--->1-----group(0):09 group(1):9
03--->1-----group(0):03 group(1):3
表达式中的‘?’表示当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是“非贪心的”。“非贪心的”模式匹配搜索到的、尽可能短的字符串,而默认的“贪心的”模式匹配搜索到的、尽可能长的字符串。例如,在字符串“oooo”中,“o+?”只匹配单个“o”,而“o+”匹配所有“o”,近似于String reg1="0+(\\d)"表达式
008--->1-----group(0):008 group(1):8
09--->1-----group(0):09 group(1):9
090--->1-----group(0):090 group(1):90
030--->1-----group(0):030 group(1):30
这个表达式的匹配规则就是0开头的数字字符串,表达式’\\d‘表示数字匹配,‘+’表示一次或多次匹配前面的字符
++++++++++++++++++++++++++++++++++++++
String reg1="0+(\\d+?)"
008--->1-----group(0):008 group(1):8
09--->1-----group(0):09 group(1):9
09--->1-----group(0):09 group(1):9
03--->1-----group(0):03 group(1):3
表达式中的‘?’表示当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是“非贪心的”。“非贪心的”模式匹配搜索到的、尽可能短的字符串,而默认的“贪心的”模式匹配搜索到的、尽可能长的字符串。例如,在字符串“oooo”中,“o+?”只匹配单个“o”,而“o+”匹配所有“o”,近似于String reg1="0+(\\d)"表达式
那Possessive 数量词的正则表达式和贪心的正则表达是有什么区别??换成0+(\\d++)的打印结果跟0+(\\d+)是一样的
贪婪在匹配不成功后会产生回溯
lz还不清楚正则表达式的 + ?的语法含义