1

"abc"の2番目に一致する正規表現が必要"abcasdabchjkabc"です。私はこのようなコードを書こうとします、

Pattern p = Pattern.compile("(?<=abc(.*?))abc");

しかし、それは:をスローしjava.util.regex.PatternSyntaxExceptionます

Look-behind group does not have an obvious maximum length near index 11
(?<=abc(.*?))abc
           ^
    at java.util.regex.Pattern.error(Pattern.java:1713)
    at java.util.regex.Pattern.group0(Pattern.java:2488)
    at java.util.regex.Pattern.sequence(Pattern.java:1806)
    at java.util.regex.Pattern.expr(Pattern.java:1752)
    at java.util.regex.Pattern.compile(Pattern.java:1460)
    at java.util.regex.Pattern.<init>(Pattern.java:1133)
    at java.util.regex.Pattern.compile(Pattern.java:823)

正しいものを見せてください!

4

3 に答える 3

5

*使用したり+、後読みアサーションで使用したりすることはできません。

実際に2つの間のすべてを一致させたいabcですか?

Pattern.compile("abc(.*?)abc");

それとも、 2つあること確認したいだけですabcか?

Pattern.compile("abc.*?abc");

どちらの場合も、後読みの必要はないと思います。

于 2013-03-13T06:14:55.443 に答える
1

私はあなたが次のようなものが欲しいと思います:

java.util.regex.Pattern.compile("(?<=abc.{1,99})abc");

2番目のabcを見つけます。

于 2013-03-13T06:27:08.997 に答える
1

簡単なオプションは、パターンを2回一致させることです。

String input = "abcXYabcZRabc";

Pattern p = Pattern.compile("abc");
Matcher m = p.matcher(input);

m.find(); // what to do when there is no match?
m.find(); // what to do when there is only one match?

System.out.println("Second match is between " + m.start() + " and " + m.end());

実例: http: //ideone.com/uVZL3j

于 2013-03-13T06:30:35.497 に答える