关于正则表达式pattern类的matcher匹配的问题..

haifei123 2007-08-27 03:48:02
private static final String procedureREx = "(REP_(\\d{1})_(\\d{1,2})(_(\\d{1}))?)"; //正则表达式

private static ProcedureInfo getProcedureInfo(String procedure) {
ProcedureInfo info = new ProcedureInfo();

String procedureName = null;
String category = null;
String reportNo = null;
String rowType = null;

Pattern procPattern = Pattern.compile(procedureREx); //编译正则表达式

Matcher matcher = procPattern.matcher(procedure); //匹配字符串到正则表达式

if (matcher.find()) { //字符串是否匹配正则表达式
procedureName = matcher.group(1);
category = matcher.group(2);
reportNo = matcher.group(3);
rowType = matcher.group(5);

info.setName(procedureName);
info.setCategory(Integer.parseInt(category));
info.setReportNo(Integer.parseInt(reportNo));

if (rowType != null) {
info.setRowType(Integer.parseInt(rowType));
}

info.setArgs(getArgs(procedure));
return info;
} else {
System.out.println("can't recognize procedure:" + procedure);
return null;
}
}
我不太明白的式
procedureName = matcher.group(1);
category = matcher.group(2);
reportNo = matcher.group(3);
rowType = matcher.group(5);
这里的1,2,3...是什么意思....请教高手指教...
...全文
779 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
rascalboy520 2008-06-20
  • 打赏
  • 举报
回复
是正则的分组,你可以看一下相关的api
hoszone 2008-06-20
  • 打赏
  • 举报
回复
拿楼上的来说吧
如 “1a2b7d”.matchers( "(\\d)a(\\d)b(\\d)"), group(1)就是1, group(3)就是7
group(2)是2

group是其中的子表达式(\\d)的匹配结果.
大海Online 2007-08-27
  • 打赏
  • 举报
回复
学习了下,顺便抄过来了

ps: 如 “1a2b7d”.matchers("\\d{1}"), group(1)就是1, group(3)就是7吧



group
public String group(int group)返回在以前匹配操作期间由给定组捕获的输入子序列。
对于匹配器 m、输入序列 s 和组索引 g,表达式 m.group(g) 和 s.substring(m.start(g), m.end(g)) 是等效的。

捕获组是从 1 开始从左到右的索引。组零表示整个模式,因此表达式 m.group(0) 等效于 m.group()。

如果该匹配成功了,但指定组未能匹配输入序列的任何部分,则返回 null。注意,某些组(例如,(a*))匹配空字符串。当这些的组成功匹配输入中的空字符串时,此方法将返回空字符串。


指定者:
接口 MatchResult 中的 group
参数:
group - 此匹配器模式中捕获组的索引。
返回:
在以前的匹配期间组所捕获的子序列(可能为空);如果组未能匹配输入的部分,则返回 null。
抛出:
IllegalStateException - 如果没有尝试任何匹配,或者以前的匹配操作失败。
IndexOutOfBoundsException - 如果在给定索引的模式中不存在捕获组。
huanzhugege 2007-08-27
  • 打赏
  • 举报
回复
分组!《J2EE开发全程实录》中对这个问题介绍的很详细。

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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