1

我需要一个匹配第二个的正则"abc"表达式"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

您不能在后视断言中使用*+

你真的想匹配两个abcs 之间的所有内容吗?

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

还是您只想检查是否有两个s abc

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

在这两种情况下,我都认为不需要向后看。

于 2013-03-13T06:14:55.443 回答
1

一个简单的选择是匹配您的模式两次

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 回答
1

我猜你想要类似的东西:

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

它找到第二个 abc。

于 2013-03-13T06:27:08.997 回答