【发布时间】:2012-09-24 21:33:24
【问题描述】:
这个简单的正则表达式程序
import java.util.regex.*;
class Regex {
public static void main(String [] args) {
System.out.println(args[0]); // #1
Pattern p = Pattern.compile(args[0]); // #2
Matcher m = p.matcher(args[1]);
boolean b = false;
while(b = m.find()) {
System.out.println(m.start()+" "+m.group());
}
}
}
由java regex "\d" "sfdd1" 调用编译并运行良好。
但是如果#1 被Pattern p = Pattern.compile("\d"); 替换,它会给出编译器错误,说非法转义字符。在#1 中,我还尝试打印命令行参数中指定的模式。它打印\d,这意味着它只是在#2 中被\d 取代。
那么为什么它不会抛出任何异常呢?最后是Pattern.compile() 正在使用的字符串参数,那么它不会检测到非法转义字符吗?有人可以解释一下为什么会这样吗?
【问题讨论】:
-
试试这个
Pattern p = Pattern.compile("\\d"); -
我知道它有效,这不是我的问题
-
在 Java 代码中表示
\d必须使用\\d完成,\ 字符在 Java 代码中被视为转义字符。见this question。