18

次のエラーが表示されます。

java.util.regex.PatternSyntaxException: Look-behind group does not have an
    obvious maximum length near index 22
([a-z])(?!.*\1)(?<!\1.+)([a-z])(?!.*\2)(?<!\2.+)(.)(\3)(.)(\5)
                      ^

一致させようとしていますが、一致COFFEEしませんBOBBEE

Java 1.6 を使用しています。

4

3 に答える 3

19

このエラーを回避するには、次+のようなリージョンに置き換える必要があり{0,10}ます。

([a-z])(?!.*\1)(?<!\1.{0,10})([a-z])(?!.*\2)(?<!\2.{0,10})(.)(\3)(.)(\5)
于 2011-12-13T03:16:27.280 に答える
13

Java は後読みで可変長をサポートしていません。
この場合、簡単に無視できるようです (入力全体が 1 つの単語であると仮定します)。

([a-z])(?!.*\1)([a-z])(?!.*\2)(.)(\3)(.)(\5)

両方の後読みは何も追加しません: 最初は 1 つしかなかった文字を少なくとも 2 つアサートし、2 つ目は 2 番目の文字が最初の文字と異なることを確認し(?!.*\1)ます。

作業例: http://regexr.com?2up96

于 2011-09-25T05:12:27.767 に答える