即使其他工具看起来与所需模式匹配,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
哪个没意义?
答案 0 :(得分:0)
删除前向斜杠和g
修饰符,java和js使用两种不同的方法来传递正则表达式参数。还要注意group(0)
打印整个匹配,其中group(x)
打印相应的匹配。
String argPattern = "(-o\\s*\\S+)|(-f\\s*\\S+)|(-l\\s*\\S+)";
示例:
String argPattern = "/(-o\\s*\\S+)|(-f\\s*\\S+)|(-l\\s*\\S+)/g";
Pattern r = Pattern.compile(argPattern);
Matcher m = r.matcher(argList);
while (m.find( )) {
System.out.println("Found value: " + m.group(1) );
System.out.println("Found value: " + m.group(2) );
System.out.println("Found value: " + m.group(3) );
}
答案 1 :(得分:0)
您需要从正则表达式中删除分隔符和全局修饰符,Java不使用此语法。另外,我将使用一个字符集而不是三个组构造。
Pattern p = Pattern.compile("-[ofl]\\s*\\S+");
Matcher m = p.matcher(argList);
while (m.find()) {
System.out.println("Found value: " + m.group());
}