在Java正则表达式中,.
表示匹配任意一个字符,*
表示匹配前面的表达式0次或多次。因此,.*
表示匹配任意一个字符0次或多次,也就是匹配任意字符串;而.*?
表示匹配任意一个字符0次或多次,但尽可能少地匹配,也就是非贪婪匹配。
例如:
String text = "hello, world!"; Pattern pattern1 = Pattern.compile("he.*"); Matcher matcher1 = pattern1.matcher(text); System.out.println(matcher1.find()); // 输出true,匹配整个字符串"hello, world!" Pattern pattern2 = Pattern.compile("he.*?"); Matcher matcher2 = pattern2.matcher(text); System.out.println(matcher2.find()); // 输出true,只匹配字符串"he"
在上面的示例中,pattern1
使用了贪婪匹配,匹配到了整个字符串"hello, world!";而pattern2
使用了非贪婪匹配,只匹配到了字符串"he"。
在某些情况下,.*
可能会匹配到换行符\n
,而.*?
不会。如果想匹配任意字符(包括换行符),可以使用[\s\S]*
或[\d\D]*
或[\w\W]*
等表达式。
评论