【发布时间】:2013-06-04 09:49:45
【问题描述】:
给定:
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"),根据该定义!
感谢大家的帮助。
【问题讨论】:
-
无法判断甚至无法编译的 Java 代码的运行时行为。请修复您的代码。
-
抱歉,Marko,已解决。
标签: java regex scjp quantifiers