2017-01-14 7 views
1

文字列がX文字のシーケンス(同じ文字列)で終わらないかどうかを確認するための苦労しています。例えばJava正規表現ネガティブ先読みが正しく機能しない

:X = 5

1xxxxx - should fail 
1xxx - should pass 

これまでの私の正規表現:1(?!\\w\1{4})は動作しません。どちらの場合もfalseを返します。あなたは、文字列の末尾のアンカーを追加する必要が

おかげ

+0

これを試してください: '1(\ d)(?!。* \ 1 {3})。*'デモ:https://regex101.com/r/cczl1P/1 – MYGz

+0

非常に良い!しかし、捕捉グループを使って正規表現をより複雑にしようとすると、それはもはや機能しません。私がしようとしているのは、1に正確にX文字が続き、それらのX文字が同じでないことを確認してください。 – user3159152

+0

これはキャプチャグループではありませんが、それは1つのように見えますが、先は否定的な見方です。あなたの質問はあまり具体的ではありません。一致させる文字列と一致させたくない文字列を含めることができれば、より適切な解決法が得られます。 – MYGz

答えて

0

1(?!.*(.)\1{4,}$).*$ 
0

これは厳しいものだったが、あなたの問題の条件が正しければ、「文字列は、一連のでは終わりませんXの文字は」、これはそれを行う必要があります: - )

(?:(.)(?:(?:(?!\1).){1,4})|^(.)\2{0,3})$ 

をそれは基本的に非キャプチャグループ(?:内部の二つの可能な変更です。

最後の部分 - ^(.)\2{0,3} - 文字列が5文字未満の完全な文字列かどうかをテストします。

最初の部分 - (.)(?:(?:(?!\1).){1,4}) - 1つをキャプチャして文字の変更を確認し、負の先読みによって、次の文字と一致しないことを確認します。これは.と一致し、 4回未満

両方の変更は、グループ外の文字列$の終わりについてテストされます。

Check it out here at regex101

関連する問題