鉴于:
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")!
谢谢你们的帮助。