社区
Java SE
帖子详情
关于正则表达式问题:有谁用过Matcher类的group()方法没有
losingaries
2005-12-23 09:48:21
JDK1.4里面的Matcher类有一个group(),group(int)等方法,虽然看了API,可还是不太清楚group的概念,有谁用过没有,能不能简单的给各例子,说明一下问题?
...全文
1673
5
打赏
收藏
关于正则表达式问题:有谁用过Matcher类的group()方法没有
JDK1.4里面的Matcher类有一个group(),group(int)等方法,虽然看了API,可还是不太清楚group的概念,有谁用过没有,能不能简单的给各例子,说明一下问题?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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*))匹配空字符串。当这些的组成功匹配输入中的空字符串时,此方法将返回空字符串
详解
正则表达式
Matcher
类
中
group
方法
主要介绍了
正则表达式
Matcher
类
中
group
方法
,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
Java正则相关的Pattern和
Matcher
类
及遇到的坑
此篇文章是记录我在学习Java
正则表达式
时候学到的和遇到的坑。 先来说说
Matcher
里面的三个
方法
(取的结果以
group
()
方法
为例子) matches():整个匹配,只有整个字符序列完全匹配成功,才返回True,否则返回False。但如果前部分匹配成功,将移动下次匹配的位置。举个例子如果字符串为”a123″,
正则表达式
为”\w\d\d\d”,则matches()
方法
才返回true,换言之,就是要匹配的字符串需要跟
正则表达式
一一对应,字母对应字母,数字对应数字,所以称之为完全匹配,错一位都不行。(这里的理解花了我好长时间,网上搜到的都
没有
提及,也许是我理解能力不够) find()
正则表达式
中
Matcher
的
group
()、start()、end()带参
方法
解析
最近学习
正则表达式
,发现Java中的一些术语与其他地方描述的有所差异。比如Java
正则表达式
中的“组”概念与《
正则表达式
必知必会》一书中讲述的“子表达式”其实是一样的,只是表述不同而已。由此也引发了使用JavaAPI时对
group
(int
group
)、start(int
group
)、end(int
group
)不是太理解。在阅读了关于
正则表达式
问题
:有谁用过
Matcher
类
的g
Java
正则表达式
--
Matcher
.
group
函数的深度用法
最近学习
正则表达式
,发现Java中的一些术语与其他地方描述的有所差异。比如Java
正则表达式
中的“组”概念与《
正则表达式
必知必会》一书中讲述的“子表达式”其实是一样的,只是表述不同而已。由此也引发了使用JavaAPI时对
group
(int
group
)、start(int
group
)、end(int
group
)以及
group
()不是太理解。在阅读了关于
正则表达式
问题
:有谁用过
Matcher
类
的...
JAVA
正则表达式
的
Matcher
类
正则表达式
语法
Matcher
类
: 使用
Matcher
类
,最重要的一个概念必须清楚:组(
Group
),在
正则表达式
中 ()定义了一个组,由于一个
正则表达式
可以包含很多的组,所以下面先说说怎么划分组的, 以及这些组和组的下标怎么对应的. 下面我们看看一个小例子,来说明这个
问题
\w(\d\d)(\w+) 这个
正则表达式
有三个组: 整个\w(\d\d)(\w+) 是第0组
group
(0
Java SE
62,614
社区成员
307,319
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章