我需要创建一个正则表达式,如果前三位数不是666,则返回true。以下是一些示例:

66600abc-错误

606asdfnh-true

600asdfasdf -true

我已经尝试过了,但是没有得到想要的结果。

System.out.println(Pattern.matches("[(^[(6)(6)(6)])][a-zA-Z0-9]*", "6660"));
System.out.println(Pattern.matches("[^6]{3}[a-zA-Z0-9]*", "606"));
System.out.println(Pattern.matches("[^666]{3}[a-zA-Z0-9]*", "506"));
System.out.println(Pattern.matches("[^666][a-zA-Z0-9]*", "636"));
System.out.println(Pattern.matches("[^666][a-zA-Z0-9]*", "666"));

最佳答案

使用负前瞻(?!666)并匹配字母数字符号,可以使用\p{Alnum}

System.out.println("6660".matches("(?!666)\\p{Alnum}*"));


请注意,默认情况下,matches()锚定模式,不需要^$

一些online tests

System.out.println("6660".matches("(?!666)\\p{Alnum}*"));        // false
System.out.println("66600abc".matches("(?!666)\\p{Alnum}*"));    // false
System.out.println("606asdfnh".matches("(?!666)\\p{Alnum}*"));   // true
System.out.println("600asdfasdf".matches("(?!666)\\p{Alnum}*")); // true


更新:

由于是JFlex,因此如果最小字符数为3并且仅允许使用字母数字符号,则可以使用此正则表达式:

"^([a-zA-Z0-9]{1,2}$|[a-zA-Z0-57-9][a-zA-Z0-9]{2}|[a-zA-Z0-9][a-zA-Z0-57-9][a-zA-Z0-9]|[a-zA-Z0-9]{2}[a-zA-Z0-57-9])[a-zA-Z0-9]*"


如果需要允许任何字符,而不仅仅是字母数字,则可以将[a-zA-Z0-9]替换为.,将[a-zA-Z0-57-9]替换为[^6]

"^(.{1,2}$|[^6].{2}|.[^6].|.{2}[^6]).*"


请参见regex demo

注意,您可能会在我的previous Regex: match everything but SO answer中找到类似的模式。

关于java - Java正则表达式:前三位数不是666,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39870244/

10-10 10:33