我需要创建一个正则表达式,如果前三位数不是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/