解决方案 »
- java初学者问个关于线程的问题,望高手来解答。
- ★★★★JaVa 选择题★★★★
- Swing组件刷新问题,急!!!!!
- 在线等..小弟刚学java...遇到点问题..望高手们止步帮我看看。不胜感激
- 请问判断从一个JTextField中取出来的string是int,并且是正数啊?谢谢
- 要从一个表中取出数据 该表中有 2万条数据 通过jdbc 连接 如何实现
- 我用jdk1.4.1,xp的,运行javac一直有"can not read.. 1 error"
- 发现一个Java陷进,有兴趣的进来瞧瞧
- 使用JDK编译servlet不能通过,是不是要把servlet.jar这个文件放到classpath这个环境变量中?
- struts2中对某个辅助类的静态成员变量进行控制是否要加同步控制呀?向java高手求教
- 循环输入字符到StringBuffer 最后输出字符问题
- 我的泛型方法为何不支持int
....
for(String secondElement:new String[]{"\\were\\w","\\were","T\\w+","Never.*?!"}){
examine(element,secondElement);
}
.....
input: As long as there is injustice,whenever a
\were\w
\were
find() 'here' start=12,end=16
T\w+
Never.*?!
input: baby cires out, wherever a distress
\were\w
find() 'herev' start=17,end=22
\were
find() 'here' start=17,end=21
T\w+
Never.*?!
input: signal sounds among the starts ... We all be there.
\were\w
\were
find() 'here' start=46,end=50
T\w+
Never.*?!
input: This fine ship, and this fine crew ...Never give up, Never surrender!
\were\w
\were
T\w+
find() 'This' start=0,end=4
lookingAt() 'This' start=0,end=4
Never.*?!
find() 'Never give up, Never surrender!' start=38,end=69
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
Reluctant 数量词
X?? X,一次或一次也没有
X*? X,零次或多次
X+? X,一次或多次
X{n}? X,恰好 n 次
X{n,}? X,至少 n 次
X{n,m}? X,至少 n 次,但是不超过 m 次
你可以使用点 . 试试.是任意字符,他会把一切都包含进去,怎么破。而你的正则没有表达出我的业务逻辑啊?
你原先的写法没有问题,问题出在这里:if(m.lookingAt()){
System.out.println("lookingAt() '"+m.group()+"' start="+m.start()+",end="+m.end());
}
if(m.matches()){
System.out.println("matches() '"+m.matches()+"' start="+m.start()+",end="+m.matches());
}你把它注释掉看看
你可以使用点 . 试试.是任意字符,他会把一切都包含进去,怎么破。而你的正则没有表达出我的业务逻辑啊?
你原先的写法没有问题,问题出在这里:if(m.lookingAt()){
System.out.println("lookingAt() '"+m.group()+"' start="+m.start()+",end="+m.end());
}
if(m.matches()){
System.out.println("matches() '"+m.matches()+"' start="+m.start()+",end="+m.matches());
}你把它注释掉看看lookingAt() 尝试将从区域开头开始的输入序列与该模式匹配
正则表达式:"\\w*ere\\w*"
执行:
while(m.find()){
//打印m.group();
if(m.lookingAt()){
//打印m.group();
}
if(m.matches()){
//打印m.group();
}
}
执行过程是:“while(m.find())”→吞没方式匹配到“there”→“ if(m.lookingAt())”→从新回到字符串实例的起始字符开始匹配,即匹配“As ...”→匹配不成功→if(m.matches())→整个字符串实例进行匹配,其实也是从字符串实例的首字母开始匹配,就当前的字符串实例来说,永远匹配不成功,但是它会吞没到“As ”,剩下的字符串实例是“long as there is injustice,whenever a“→“while(m.find())”→吞没方式匹配到“there”→上面的流程死循环...
上面就是造成死循环的原因