1

我创建了以下条件正则表达式,它似乎可以在http://gskinner.com/RegExr/上工作,但不能在 Java 中编译。

正则表达式如下:

X: (\d+). Y: (\d+)(?(?=:inherit=(true|false)))

它应该拉出我的 X、Y 值和(如果存在)后面跟着 :inherit= 的值

例如

X: 192131, Y: 1923123 (matches 192131, 1923123)

X: 192131, Y: 1923123:inherit=true (matches 192131, 1923123, true)

X: 192131, Y: 1923123:inherit=false (matches 192131, 1923123, false)

在Java中我得到一个错误:

Unknown inline modifier near index 20 X: (\d+). Y: (\d+)(?(?=:inherit=(true|false))) 

索引 20 是第二个括号(?(?

有人可以帮我用 Java 把它弄好,也许还能解释为什么网站测试人员会处理它。

谢谢!

4

2 回答 2

2

(?(不是有效的语法

采用:

X:\s(\d+),\sY:\s(\d+)(?::inherit=(true|false))?

你需要逃跑\

于 2012-06-05T08:28:53.133 回答
0

您使用的工具具有 actionscript 正则表达式语法,这似乎与 java sytax 不同。

一个可行的解决方案可能是:X: ([0-9]+). Y: ([0-9]+)(?::inherit=(true|false))?

这是一个工作示例:

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class plop {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String regex = "X: ([0-9]+). Y: ([0-9]+)(?::inherit=(true|false))?";

        String[] elem = new String [] {
                "X: 192131, Y: 1923123 (matches 192131, 1923123)",
                "X: 192131, Y: 1923123:inherit=true (matches 192131, 1923123, true)",
                "X: 192131, Y: 1923123:inherit=false (matches 192131, 1923123, false)"
        };

        for (String s : elem) {
            Pattern compile = Pattern.compile(regex);
            Matcher matcher = compile.matcher(s);
            if (matcher.find()) {
                System.out.print("'"+matcher.group(0)+"'");
                System.out.print(", X:"+matcher.group(1));
                System.out.print(", Y:"+matcher.group(2));
                if (matcher.group(3) !=null)
                    System.out.print(", inherit:"+matcher.group(3));
                System.out.println();
            }
        }
    }

}

结果:

'X: 192131, Y: 1923123', X:192131, Y:1923123
'X: 192131, Y: 1923123:inherit=true', X:192131, Y:1923123, inherit:true
'X: 192131, Y: 1923123:inherit=false', X:192131, Y:1923123, inherit:false
于 2012-06-05T08:25:43.683 回答