关于正则表达式,求Pattern,Matcher 详细解说!

xiaodenger 2009-10-23 01:19:30
Pattern:正则表达式的编译表示形式.


Pattern p = Pattern.compile("a*b"); //将给定的正则表达式编译到模式中。
Matcher m = p.matcher("aaaaab"); //创建匹配给定输入与此模式的匹配器。
boolean b = m.matches(); //尝试将整个区域与模式匹配。
m.find(); /*尝试查找与该模式匹配的输入序列的下一个子序列。此方法从匹配器区域的开头开始,如果该方法的前一次
*调用成功了并且从那时开始匹配器没有被重置,则从以前匹配操作没有匹配的第一个字符开始。
*/
m.group();// 返回由以前匹配操作所匹配的输入子序列。


Matcher 与Pattern 的关系?

Pattern p = Pattern.compile("a*b"); 根据API解释,这个方法的意义在于将Regex装载到Pattern(模式)中! 这里Pattern类似与模板的意思吧!个人理解!

p.matcher("aaaaab");如何解释这个方法? 让模式和字符串匹配?得出什么结果呢? Matcher(匹配器!?) 我解释不通?

p.matcher("aaaaab"); 和
p.matcher("aaaaaaaaaaaab"); 的返回值是一个对象么? 为什么?

boolean b = m.matches(); API的解释什么意思,看不明白! 这个区域?在那里!范围是什么?

m.group();子序列是什么东西! 这里根据API的解释,Matcher 类似与Collection(容器) 或持有容器.容器中的元素是子序列!但是,问题出来了:子序列如何得到的?来源是哪里?

m.find();m.find(int start)如果matcher是容器或持有容器,那么这个方法就类似与iterator.next();list.get(int index);

好了先写这么多吧!剩下的什么时候想起什么时候问!谢谢各位了!
...全文
1285 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
willy2 2011-06-05
  • 打赏
  • 举报
回复
希望能够帮助到你!
http://blog.csdn.net/willy2/archive/2009/10/09/4645325.aspx
jy0001087 2011-06-05
  • 打赏
  • 举报
回复
Pattern p=Pattern.compile("a*b") 其中Pattern.compile(a*b)认为是个匹配模板
Matcher m 认为是个比较器对象
Matcher m=p. matcher("aaaab") 认为其中m是个依赖于p这个匹配模板的比较器对象,需要与模板比较的对象是“aaaab”
m.matches() 进行比较动作,并返回结果。
m.find() 也是进行匹配,返回结果与matches()方法不同
这样理解 可以不
xiaodenger 2009-10-26
  • 打赏
  • 举报
回复
晚上结贴~这几天有事~没上来!
lz12366007 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xiaodenger 的回复:]
引用 4 楼 lz12366007 的回复:
其实可以这么说
group就是正则表达式里面的()个数
所以你这里的 groupCount为0

() 是不是正则表达式里'组'的概念!

matcher.group() 是不是只 (pattern.matches(str))str中包含匹配pattern 的个数~!
例如!
Pattern p = Pattern.compile("a*b");
Matcher m = p.matches("aaabaaabaaaaabaabaaaabb");
int count = m.groupCount();
System.out.println("count: "+count);
/*(out:)
count: 6;
这个对不?



[/Quote]

组的数量是由Pattern.compile("a*b"); 里面的 表达式 决定的
正则表达式里有几个() 则数组group[i]!!这里的i就是上面的那个个数
如果没有() 则 没有group

关于正则的基础知识 给你推荐个
:http://hi.baidu.com/ismayday/blog/item/7f5b86942741d11dd21b708f.html
lz12366007 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xiaodenger 的回复:]
引用 4 楼 lz12366007 的回复:
其实可以这么说
group就是正则表达式里面的()个数
所以你这里的 groupCount为0

() 是不是正则表达式里'组'的概念!

matcher.group() 是不是只 (pattern.matches(str))str中包含匹配pattern 的个数~!
例如!
Pattern p = Pattern.compile("a*b");
Matcher m = p.matches("aaabaaabaaaaabaabaaaabb");
int count = m.groupCount();
System.out.println("count: "+count);
/*(out:)
count: 6;
这个对不?


组的数量是由Pattern.compile("a*b"); 里面的 表达式 决定的
正则表达式里有几个() 则数组group[i]!!这里的i就是上面的那个个数
如果没有() 则 没有group

关于正则的基础知识 给你推荐个
:http://hi.baidu.com/ismayday/blog/item/7f5b86942741d11dd21b708f.html



[/Quote]
loveofmylife 2009-10-23
  • 打赏
  • 举报
回复
(?<=exp)零宽断言 匹配exp后面的位置
(?=exp) 这个就是匹配exp前面的位置
\\w*?: \\w*是零个或者多个字符,后面的?是勉强型量词,该量词匹配满足模式所需的最小字符
xiaodenger 2009-10-23
  • 打赏
  • 举报
回复
2:(?<=aabaaaabaaaaaab)\\w*?(?=aaaaaabaaaaaab)

能解释下3个红色的地方是什么意思么!?

loveofmylife 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 xiaodenger 的回复:]
我想在'aabaaaabaaaaaabaaaabbaaaaaabaaaaaab'取红色的部分,只用正则要怎么写!
[/Quote]
方法多的很啊,看你具体要求啊,就你现在这个题目可以
1:“aaaabb”
2:(?<=aabaaaabaaaaaab)\\w*?(?=aaaaaabaaaaaab)
3:a{4}b{2}
...
xiaodenger 2009-10-23
  • 打赏
  • 举报
回复
是么!我去联系下!
xiaodenger 2009-10-23
  • 打赏
  • 举报
回复
我想在'aabaaaabaaaaaabaaaabbaaaaaabaaaaaab'取红色的部分,只用正则要怎么写!
closewbq 2009-10-23
  • 打赏
  • 举报
回复
如果你对正则非常感兴趣,你可以讨教下火龙果,我从他身上学习了不少正则的东西!
xiaodenger 2009-10-23
  • 打赏
  • 举报
回复
我这几天学正则表达式!2天后结贴!
xiaodenger 2009-10-23
  • 打赏
  • 举报
回复
今天才认真看正则表达式!一直都不太明白!ls 的解释不错!我去试试
closewbq 2009-10-23
  • 打赏
  • 举报
回复
我按照我的理解说下,
Pattern就是一个编译正则表达式的模式对象。
Matcher从意思上讲就是一个匹配器。
p.matcher就是根据特定的正则模式对象,针对某一字符串得到一个特定的匹配对象。
matches方法用来判断整个输入字符串是否匹配正则表达式模式。
find()像迭代器一样从前到后的遍历输入的字符串。

find(i)从字符串的i作为搜索起点,进行搜索。
group是用括号划分的正则表达式,你可以根据0,1,2来引用某个组。
0代表全部的正则,1表示第一对括号,依次。。。。。
xiaodenger 2009-10-23
  • 打赏
  • 举报
回复
能举个groupcount!=0 的例子么?
realreachard 2009-10-23
  • 打赏
  • 举报
回复
自己用用就明白了
xiaodenger 2009-10-23
  • 打赏
  • 举报
回复
不对的话错在哪里!指点下!
xiaodenger 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lz12366007 的回复:]
其实可以这么说
group就是正则表达式里面的()个数
所以你这里的 groupCount为0
[/Quote]
() 是不是正则表达式里'组'的概念!

matcher.group() 是不是只 (pattern.matches(str))str中包含匹配pattern 的个数~!
例如!
Pattern p = Pattern.compile("a*b");
Matcher m = p.matches("aaabaaabaaaaabaabaaaabb");
int count = m.groupCount();
System.out.println("count: "+count);
/*(out:)
count: 6;
这个对不?



xiaodenger 2009-10-23
  • 打赏
  • 举报
回复
p.matcher("aaaaab"); 和
p.matcher("aaaaaaaaaaaab"); 的返回值是一个对象么?
cweijiaweil 2009-10-23
  • 打赏
  • 举报
回复
加载更多回复(7)

62,614

社区成员

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

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