正则表达式匹配中,(.*)和(.*?)匹配区别?

2020-07-30 19:49发布

2条回答
爱学习的蜗牛
2020-09-02 10:27






一个字符串就是一个正则表达。

如字符串"\D"在Java中表示非数字([^0-9]),而Java代码里字符串中的'\'符号需要转义,所以要表示这个正则表达式需要用"\\D"。


Java中和正则表达式相关的主要有两个类:

importjava.util.regex.Pattern;

importjava.util.regex.Matcher;




Pattern类表示的是某种匹配模式。一个Pattern对象和一个正则表达式相关联,而不表示具体的匹配。

Patternpattern=Pattern.compile("[a-z]\\d{3}.*");




Matcher类表示的是具体的匹配。一个Matcher对象和一个具体的字符串相关联,表示在指定模式下的这个字符串的匹配。

Matchermatcher=pattern.matcher("hello123world");


具体的匹配信息都在Matcher对象中,所以多个Matcher对象可以共享一个Pattern对象。

查看给定的字符串是否完全匹配指定模式:

System.out.println(matcher.matches());//true


//下面的代码完全等价,这是一个简便方法

System.out.println(Pattern.matches("[a-z]+\\d{3}.*","hello123world"));//true





看代码示例:

importjava.util.regex.Matcher;

importjava.util.regex.Pattern;


publicclassTest{

publicstaticvoidmain(String[]args){

Stringstr="汽车鲁A12345、京A98765、辽B55555超速";

Stringpattern="(\\D{2})(\\d+)";


Patternr=Pattern.compile(pattern);

Matcherm=r.matcher(str);


//给出的整个字符串str是否符合正则表达式pattern

System.out.println(m.matches());//false


System.out.println("==========匹配查找");

while(m.find()){//从str开头查找符合正则表达式的子串,每次查找会从上一次找到的位置后继续往后查找

Stringprint=String.format("分组2出现的位置索引:%d,分组2内容<%s>",m.start(2),m.group(2));

System.out.println(print);

}


System.out.println("==========重置匹配器,重置查找位置");

m.reset();//重置匹配器,下一次不指定索引的查找从str头开始。此句可以省略,看下面注释


intindex=10;

while(m.find(index)){//从指定索引开始查找。由于指定了索引,之前的m.reset()对执行结果没影响,可以省略

Stringprint=String.format("此次匹配,分组数:%d,匹配的子串为<%s>,分组1内容<%s>,分组2内容<%s>",

m.groupCount(),m.group(0),m.group(1),m.group(2));

System.out.println(print);


index=m.end();

}


System.out.println("==========重置匹配器,重置输入序列");

m.reset("鲁B99999");//重置匹配器的输入序列

while(m.find()){

Stringprint=String.format("分组2出现的位置索引:%d,分组2内容<%s>",m.start(2),m.group(2));

System.out.println(print);

}

}

}


程序输出:

false

==========匹配查找

分组2出现的位置索引:4,分组2内容<12345>

分组2出现的位置索引:12,分组2内容<98765>

分组2出现的位置索引:20,分组2内容<55555>

==========重置匹配器,重置查找位置

此次匹配,分组数:2,匹配的子串为<京A98765>,分组1内容<京A>,分组2内容<98765>

此次匹配,分组数:2,匹配的子串为<辽B55555>,分组1内容<辽B>,分组2内容<55555>

==========重置匹配器,重置输入序列

分组2出现的位置索引:2,分组2内容<99999>




一周热门 更多>