为了账号安全,请及时绑定邮箱和手机立即绑定

Java Regex捕获组

Java Regex捕获组

catspeake 2019-08-12 18:10:07
Java Regex捕获组我试图理解这个代码块。在第一个中,我们在表达中寻找什么?我的理解是它是任何字符(0次或更多次*)后跟0到9之间的任何数字(一次或多次+)后跟任何字符(0次或更多次*)。执行此操作时,结果为:Found value: This order was placed for QT3000! OK? Found value: This order was placed for QT300 Found value: 0有人可以和我一起讨论吗?使用捕获组有什么好处?import java.util.regex.Matcher;import java.util.regex.Pattern;public class RegexTut3 {     public static void main(String args[]) {         String line = "This order was placed for QT3000! OK?";          String pattern = "(.*)(\\d+)(.*)";         // Create a Pattern object         Pattern r = Pattern.compile(pattern);         // Now create matcher object.         Matcher m = r.matcher(line);         if (m.find()) {             System.out.println("Found value: " + m.group(0));             System.out.println("Found value: " + m.group(1));             System.out.println("Found value: " + m.group(2));         } else {             System.out.println("NO MATCH");         }     }}
查看完整描述

3 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

这完全没问题。

  1. 第一个组(m.group(0))始终捕获正则表达式覆盖的整个区域。在这种情况下,它是整个字符串。

  2. 默认情况下,正则表达式是贪婪的,这意味着第一组在不违反正则表达式的情况下尽可能地捕获。在(.*)(\\d+)(你的正则表达式的第一部分)覆盖...QT300INT第一组和0第二。

  3. 您可以通过使第一组非贪婪来快速解决此问题:更改(.*)(.*?)

有关贪婪与懒惰的更多信息,请查看此站点。


查看完整回答
反对 回复 2019-08-12
  • 3 回答
  • 0 关注
  • 563 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信