Java regex.pattern匹配器未返回所需的结果

时间:2015-11-15 03:13:12

标签: java regex pattern-matching

即使其他工具看起来与所需模式匹配,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  

哪个没意义?

2 个答案:

答案 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());
}