regex的问题

Areslp 2007-03-30 02:23:39
package scjp.chapter6;

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

public class Regex2 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Pattern p = Pattern.compile("\\d*");
Matcher m = p.matcher("ab34ef");
boolean b = false;
while (b = m.find()) {
System.out.println(m.start() + " " + m.end());
}
}
}
这个匹配的时候为什么会匹配到索引6去呢,匹配的字符串一共才6个啊;另外*的匹配到底是怎么进行的?
...全文
231 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Areslp 2007-03-31
  • 打赏
  • 举报
回复
你是说匹配的空串?
那为什么前面匹配空串的时候还要把a,b这些给跳过去啊
Areslp 2007-03-31
  • 打赏
  • 举报
回复
6指向什么了,那没东西了啊,怎么还能算匹配上了呢..ls的,能解释下不?
malligator 2007-03-31
  • 打赏
  • 举报
回复
Areslp(努力ING) ( ) 信誉:100 Blog 2007-3-30 14:59:09 得分: 0

\d*应该是匹配数字或者空串


Areslp(努力ING) ( ) 信誉:100 Blog 2007-3-30 15:00:56 得分: 0

6指向什么了,那没东西了啊,怎么还能算匹配上了呢

=======
???



malligator 2007-03-31
  • 打赏
  • 举报
回复

a b 3 4 e f
0 1 2 3 4 5 6
Areslp 2007-03-31
  • 打赏
  • 举报
回复
顶下。。
Areslp 2007-03-30
  • 打赏
  • 举报
回复
6指向什么了,那没东西了啊,怎么还能算匹配上了呢
Areslp 2007-03-30
  • 打赏
  • 举报
回复
\d*应该是匹配数字或者空串吧,但是上面第一次匹配的时候,匹配内容是空串,但是把第一个字符“a”吃掉了,是为什么呢?
malligator 2007-03-30
  • 打赏
  • 举报
回复
a b 3 4 e f
0 1 2 3 4 5 6
malligator 2007-03-30
  • 打赏
  • 举报
回复
a b 3 4 e f
0 1 2 3 4 5 6
malligator 2007-03-30
  • 打赏
  • 举报
回复


"34"


Areslp 2007-03-30
  • 打赏
  • 举报
回复
如果1对应a
那为什么输出是
0 0
1 1
2 4
4 4
5 5
6 6
呢?
小水晶 2007-03-30
  • 打赏
  • 举报
回复
1对应a
2对应b
3对应34
5对应e
6对应f

*的匹配看这月的程序员,写的非常好,简单说是因为正则用的NFA,因此在匹配时,正则式不动,扫描字符串,这样3和4都会匹配,然后扫描到e,发现不匹配退回.

我去年考的SCJP,现在忘了些,我也做过这题,当时也很晕
gtw0520 2007-03-30
  • 打赏
  • 举报
回复
*是匹配0个或多个,所以匹配到索引6去,用+就可以

62,614

社区成员

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

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