Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式错误-使用组引用向后查看_Java_Regex_Backreference_Negative Lookahead_Negative Lookbehind - Fatal编程技术网

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)