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

时间:2013-09-19 18:14:35

标签: java regex

我需要一个正则表达式,它匹配以字母开头和结尾的字符串,并且在它之间包含4-8个字符:A-z-_和{{ 1}}

字符串不得包含两个或多个连续的.-.个字符。

没有连续限制的正则表达式_如何在此处添加限制或者可能不可能?

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

2 个答案:

答案 0 :(得分:10)

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

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

说明:

 (?!          // 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

答案 1 :(得分:1)

使用单独的正则表达式来验证字符串不包含连续字符会更容易:

if(!str.match(/--|\.\.|__/)) {
  // passed the test
}

(这是JavaScript语法,翻译成您选择的语言!)