我需要一个与"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)
请告诉我合适的人!
答案 0 :(得分:5)
您不能在后面的断言中使用*
或+
。
你真的想要匹配两个abc
之间的所有内容吗?
Pattern.compile("abc(.*?)abc");
或者您只是想检查是两个abc
?
Pattern.compile("abc.*?abc");
在任何一种情况下,我都没有看到需要 for lookbehind。
答案 1 :(得分:1)
我想你想要这样的东西:
java.util.regex.Pattern.compile("(?<=abc.{1,99})abc");
找到第二个abc。
答案 2 :(得分: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());