java 正则表达式贪婪与懒惰
java如何运行正则?
- String自带的matches()方法验证。但这种验证是调用了Pattern的matches方法。
public boolean matches(String regex) {
return Pattern.matches(regex, this);//底层源码
}
- 编译正则表达式
public static void main(String[] args) {
String str="efsefsef2@2@2222";
//?<! 匹配\w+前面跟的不是\d的内容
String reg="(?<!\d)\w+";
Pattern pattern=Pattern.compile(reg);//先编译正则
//再把字符串加入到matcher对象
Matcher matcher=pattern.matcher(str);
//开始局部匹配遇到第一个符合条件的就停止匹配
matcher.find();
System.out.println(matcher.group());
}
运行结果: 贪婪与懒惰
- 当我们不对*,+,?做处理时他就是贪婪的每次匹配都偏向于多的一方。
public static void main(String[] args) {
String str="efsefsef2@2@2222";
String reg="\w+"; //w 字母数字下划线 ?<= ?! ?:
Pattern pattern=Pattern.compile(reg);
Matcher matcher=pattern.matcher(str);
matcher.find();
System.out.println(matcher.group());
}
结果:
- 当我们想让他懒惰时,让他偏向少的一方可以在后面加上?来让我们试下。
public static void main(String[] args) {
String str="efsefsef2@2@2222";
String reg="\w+?"; //w 字母数字下划线 ?<= ?! ?:
Pattern pattern=Pattern.compile(reg);
Matcher matcher=pattern.matcher(str);
matcher.find();
System.out.println(matcher.group());
}
结果:
public static void main(String[] args) {
String str="efsefsef2@2@2222";
String reg="\w*?"; //w 字母数字下划线 ?<= ?! ?:
Pattern pattern=Pattern.compile(reg);
Matcher matcher=pattern.matcher(str);
matcher.find();
System.out.println(matcher.group());
}
结果: 同理其他只要加上?就会变得懒惰。
上一篇:
通过多线程提高代码的执行效率例子
