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))) 

2 番目の括弧がインデックス 20 の場合(?(?

誰かがJavaでそれを正しく理解するのを手伝ってくれますか?また、ウェブサイトテスターがそれを処理する理由を説明してください.

ありがとう!

4

2 に答える 2

2

(?(有効な構文ではありません。

使用する:

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

あなたは逃げる必要があります\

于 2012-06-05T08:28:53.133 に答える
0

使用したツールには actionscript 正規表現構文があり、Java 構文とは異なるようです。

実用的な解決策は次のとおりです。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 に答える