关于正则表达式问题:有谁用过Matcher类的group()方法没有

losingaries 2005-12-23 09:48:21
JDK1.4里面的Matcher类有一个group(),group(int)等方法,虽然看了API,可还是不太清楚group的概念,有谁用过没有,能不能简单的给各例子,说明一下问题?
...全文
1673 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
低调的小青蛙 2005-12-25
  • 打赏
  • 举报
回复
匹配结果除了整个结果可以得到外,表达式中的括号内的表达式,匹配到的结果也可以单独被得到。比如 "language=(\w+)" 在匹配 "<script language=javascript>" 时,除了得到匹配结果为 "language=javascript" 外,通过 group(1) 可以得到 "javascript"。

更多详细的说明,欢迎参考正则表达式入门文档:(推荐)
http://www.regexlab.com/zh/regref.htm

测试工具:(推荐)
http://www.regexlab.com/zh/workshop.asp?pat=language%3D%28%5Cw%2B%29&txt=%3Cscript%20language%3Djavascript%3E
iwlk 2005-12-25
  • 打赏
  • 举报
回复
这个例子如何:

是这样的:
bangdan.jsp?type=1
bangdan.jsp?type=2
bangdan.jsp?type=3
bangdan.jsp?type=11
等等替换成
bangdan_1.html
bangdan_2.html
bangdan_3.html
bangdan_11.html

代码:

String str="bangdan.jsp?type=1bangdan.jsp?type=2bangdan.jsp?type=3bangdan.jsp?type=11";
System.out.println("之前:"+str);
java.util.regex.Matcher m=java.util.regex.Pattern.compile("\\.jsp\\?type=([\\d]+)").matcher(str);
StringBuffer sb=new StringBuffer();
int index=0;
while(m.find())
{
sb.append(str.substring(index,m.start(1))+ m.group(1)+".html");
index=m.end(1);
}
str=sb.toString().replaceAll("\\.jsp\\?type=","_");
System.out.println("之后:"+str);
simbas00 2005-12-23
  • 打赏
  • 举报
回复
import java.util.regex.*;
class test2{
public static void main(String[] args){
Pattern p = Pattern.compile("(\\d)([A-C])");
Matcher m = p.matcher("0A");
m.matches();
System.out.println(m.group(0));//注意,group(0)总是返回整个匹配字串
System.out.println(m.group(1));
System.out.println(m.group(2));
}
}
simbas00 2005-12-23
  • 打赏
  • 举报
回复
捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组:

1 ((A)(B(C)))
2 \A
3 (B(C))
4 (C)

组零始终代表整个表达式。

之所以这样命名捕获组是因为在匹配中,保存了与这些组匹配的输入序列的每个子序列。捕获的子序列稍后可以通过 Back 引用在表达式中使用,也可以在匹配操作完成后从匹配器检索。

与组关联的捕获输入始终是与组最近匹配的子序列。如果由于量化的缘故再次计算了组,则在第二次计算失败时将保留其以前捕获的值(如果有的话)例如,将字符串 "aba" 与表达式 (a(b)?)+ 相匹配,会将第二组设置为 "b"。在每个匹配的开头,所有捕获的输入都会被丢弃。

以 (? 开头的组是纯的非捕获 组,它不捕获文本,也不统计组的总数
simbas00 2005-12-23
  • 打赏
  • 举报
回复
返回在以前匹配操作期间由给定组捕获的输入子序列。
对于匹配器 m、输入序列 s 和组索引 g,表达式 m.group(g) 和 s.substring(m.start(g), m.end(g)) 是等效的。

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

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

62,614

社区成员

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

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