正则表达式不包含两个或多个连续的字符

Mar*_*vic 2 java regex

我需要它启动,并以字母结尾和中间包含4-8个字符的字符串相匹配的正则表达式:A-z,-,_,和.

字符串不能包含两个或多个连续-,._ 字符.

没有连续限制的正则表达式是^[A-z][A-z_\\.\\-]{4,8}[A-z]$如何在这里添加限制或者可能不可能?

我知道在正则表达式中对特定单词进行否定的首选方法是否定前瞻,但我不知道如何在此处实现它.

Roh*_*ain 10

您可以事先使用负面预测来检查该角色类中是否没有任何连续字符.试试这个正则表达式:

str.matches("(?!.*([._-])\\1)[A-Za-z][a-zA-Z._-]{4,8}[a-zA-Z]");
Run Code Online (Sandbox Code Playgroud)

说明:

 (?!          // Start negative look-ahead (not followed by)
     .*       // Any string
     (        // Start capture group 1
       [._-]  // Any of ., _, -
     )
     \\1       // \1 (escaped \\1) Same character captured in capture group 1 (avoid consecutive)
 )            // Look-ahead ends
 [A-Za-z]     // Alphabets
 [a-zA-Z._-]  // Any of alphabets, ., -, _
 {4,8}        // repeated 4 to 8 times
 [a-zA-Z]     // ends with alphabet
Run Code Online (Sandbox Code Playgroud)