假设:
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!
这里我们将使用贪心量词正确吗?这将消耗整个字符串,然后回溯并查找一行中的零个或多个数字。因此,如果贪婪,'完整字符串'将包含一行中的2位数,并且只执行一次.find()(即.m.start = 0,m.group =“ab34ef”),按此定义!
感谢帮助人员。
答案 0 :(得分:0)
这些是\d*
与"ab34ef"
的匹配:
这应该解释你的输出。如果量词不情愿,那就是区别:
不情愿的量词会尽可能少地抓取整个表达式。