正则表达式求助

Richard_00 2015-07-05 12:10:35

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
public static void main( String args[] ){

// 按指定模式在字符串查找
String line = "This order was placed for QT3000! OK?";
String pattern = "(.*)(\\d+)(.*)";

// 创建 Pattern 对象
Pattern r = Pattern.compile(pattern);

// 现在创建 matcher 对象
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");
}
}
}


以上实例编译运行结果如下:

Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT300
Found value: 0

运行结果跟我想的不一样。

这个模式String pattern = "(.*)(\\d+)(.*)";
共3个捕获组,但是捕获组序号从0开始还是从1开始?
到底是哪三个捕获组?
第0个是整个模式还是(.*)?
(\\d+)表示1个或多个数字,\d表示数字,可是\d前面的\是什么?
为什么结果的第二行是300不是3000?
为什么结果的第三行是0?
...全文
145 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Inhibitory 2015-07-06
  • 打赏
  • 举报
回复
第0个是整个模式还是(.*)? 整个,所以从1开始取
夏日风帆 2015-07-06
  • 打赏
  • 举报
回复
引用 2 楼 Richard_00 的回复:
按照楼上提供的文章,(\\d+)里\d前的\还是说不清楚。 m.group(1) );对应的是第一个(.*),句点代表除\r\n以外的任意字符,我想还是会匹配整个字符串,为什么会匹配Found value: This order was placed for QT300?
楼主知道\d代表是数字是吧,,那么你不能直接写\d,而是需要将\这个符号表示出来,那么再加一个\就能表示出\,说以(\\d+)理解为\d+,
tony4geek 2015-07-06
  • 打赏
  • 举报
回复
String line = "This order was placed for QT3000! OK?"; String pattern = "(.*) (\\d+) (.*)";
Richard_00 2015-07-05
  • 打赏
  • 举报
回复
按照楼上提供的文章,(\\d+)里\d前的\还是说不清楚。 m.group(1) );对应的是第一个(.*),句点代表除\r\n以外的任意字符,我想还是会匹配整个字符串,为什么会匹配Found value: This order was placed for QT300?
Gyanxie 2015-07-05
  • 打赏
  • 举报
回复
关于group()的用法:http://winter8.iteye.com/blog/1463244

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧