Java正则表达式错误-使用组引用向后查看
我正在尝试构建一个正则表达式,该正则表达式正好匹配一个类中出现的两个字符。这是我制作的正则表达式:Java正则表达式错误-使用组引用向后查看,java,regex,backreference,negative-lookahead,negative-lookbehind,Java,Regex,Backreference,Negative Lookahead,Negative Lookbehind,我正在尝试构建一个正则表达式,该正则表达式正好匹配一个类中出现的两个字符。这是我制作的正则表达式: (?<!\1)([^raol1c])\1(?!\1) (? 如您所见,它使用负片look aheads and behind。但是,与往常一样,后者不起作用;java抛出了众所周知的异常“look behind group没有明显的最大长度”,因为它显然有一个最大长度(正好是一个字符) 理想情况下,正则表达式应该匹配“hh”、“jhh”、“ahh”、“hhj”、“hha”,而不是“hhh”
(?<!\1)([^raol1c])\1(?!\1)
(?
如您所见,它使用负片look aheads and behind。但是,与往常一样,后者不起作用;java抛出了众所周知的异常“look behind group没有明显的最大长度”,因为它显然有一个最大长度(正好是一个字符)
理想情况下,正则表达式应该匹配“hh”、“jhh”、“ahh”、“hhj”、“hha”,而不是“hhh”
关于如何处理这一问题并制定解决方案,有什么想法吗?这里有一个解决方案。它很难看,但显然有效:
如果我们在lookback中创建第一个组,那么我们可以使用它来确保lookback后面的第一个字符与前面的字符不同
您正在检查的字符串是否有一个设置的长度?不,字符串可以是任意长度。我不明白您的规则:是否应匹配“hhaa”
匹配?是的。因为正则表达式匹配“hh”,然后向前看,寻找负匹配“h”,然后向后看,寻找负匹配“h”在这两种情况下都是正确的。对于一个超出单个正则表达式的简单解决方法,请搜索([^raol1c])\1+
,并检查结果长度是否不超过两个字符。很好。用于Matcher.matches()。代码模式.compile(“(?@user2402372我有一个可用的版本。马上就要编辑了。这可以用一个字符来表示:([^raol1c])(?)?
(?<!(?=\1).)([^raol1c])\1(?!\1)
(?<!(.)(?=\1))([^raol1c])\2(?!\2)