给定:
import java.util.regex.*;
class Regex2 {
public static void main (String args[]) {
Pattern p = Pattern.compile(args[0]);
Matcher m = p.matcher (args [1]);
boolean b = false;
while (m. find()) {
System.out.print(m.start() + m.group());
}
}
}
命令行表达式为:
java Regex2 "d*" ab34ef
结果是什么?
A. 234
B. 334
C. 2334
D 0123456
E. 01234456
F. 12334567
G. Compilation fails
SCJP的书对正则表达式、模式和匹配器进行了可怕的解释,令人难以置信。不管怎样,我基本上理解了大部分的基础知识,并且看过关于贪婪和不情愿的量词的Sun/Oracle文档。我理解这些概念,但对一些事情有点模糊:
"贪婪"量词的物理符号究竟是什么?它只是一个单一的*,?还是+?如果是的话,有人能详细解释一下,根据这本书,这个答案是如何变成E的吗?当我自己运行它时,我得到了答案:2334!
这里我们将使用贪婪的量词,对吗?这将消耗整个字符串,然后回溯并在一行中查找零个或多个数字。因此,如果贪婪,"完整字符串"将在一行中包含两个数字,并且根据该定义,将只执行.find((一次(即m.start=0,m.group="ab34ef"(!
谢谢你们的帮助。
这些是d*
与"ab34ef"
:的匹配
- 索引0:零宽度
- 索引1:零宽度
- 索引2:"34">
- 索引4:零宽度
- 索引5:零宽度
- 索引6:零宽度
这应该解释您的输出。如果量词不情愿,这就是区别:
- 索引2:零宽度
- 索引3:零宽度
不情愿的量词尽可能少地抓取,以使整个表达式匹配。