即使其他工具似乎匹配所需的模式,Java 正则表达式模式匹配似乎也没有返回所需的结果。如果正则表达式语法正确,那么我不理解 Java 正则表达式的实现吗?
假设一个参数字符串:
argList = -fbin -o program.asm -l listfile.lst
这是我的实现
String argPattern = "/(-o\\s*\\S+)|(-f\\s*\\S+)|(-l\\s*\\S+)/g";
Pattern r = Pattern.compile(argPattern);
Matcher m = r.matcher(argList);
if (m.find( )) {
System.out.println("Found value: " + m.group(0) );
System.out.println("Found value: " + m.group(1) );
System.out.println("Found value: " + m.group(2) );
}
该例程的输出仅返回
-fbin, null, fbin
这没有意义吗?
您需要从正则表达式中删除分隔符和全局修饰符,Java 不使用此语法。另外,我将使用字符集,而不是三个组结构。
Pattern p = Pattern.compile("-[ofl]\\s*\\S+");
Matcher m = p.matcher(argList);
while (m.find()) {
System.out.println("Found value: " + m.group());
}
我是一名优秀的程序员,十分优秀!