gpt4 book ai didi

Java 正则表达式错误 - 使用组引用进行向后查找

转载 作者:行者123 更新时间:2023-12-02 12:56:25 24 4
gpt4 key购买 nike

我正在尝试构建一个正则表达式,它与类中字符的两次出现完全匹配。这是我制作的正则表达式:

(?<!\1)([^raol1c])\1(?!\1)

如您所见,它使用否定前瞻和后瞻。但是,像往常一样,后者不起作用;当 java 明确具有最大长度(恰好是一个字符)时,java 会抛出众所周知的异常“后向组没有明显的最大长度”。

理想情况下,正则表达式应匹配“hh”、“jhh”、“ahh”、“hhj”、“hha”,但不匹配“hhh”。

关于如何处理这个问题并制定解决方法有什么想法吗?

最佳答案

这里有一个解决方法。它很丑陋,但显然它有效:

(?<!(?=\1).)([^raol1c])\1(?!\1)

将反向引用放入lookbehind内的零长度lookahead中使得lookbehind具有固定长度。

免责声明,我没有想出这个(不幸的是):Backreferences in lookbehind

编辑:

由于某种原因,上述模式并不排除hhh。然而,这有效:

(?<!(.)(?=\1))([^raol1c])\2(?!\2)

如果我们在lookbehind中创建第一个组,那么我们可以使用它来确保lookbehind之后的第一个字符与其之前的字符不同。

Working demo.

关于Java 正则表达式错误 - 使用组引用进行向后查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16653879/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com