我正在解决Java中的问题,需要创建一个正则表达式,该正则表达式将检查字符串以查找下一条规则:
字符串只能包含数字,大写和小写字母以及下划线字符"_"
;
字符串不能以数字开头;
如果字符串从下划线开始,则第二个字符不能为下划线,即必须为数字或字母;
该字符串只能由一个字符组成,但该字符不能为下划线;
我不明白如何制作正则表达式的第一部分。我试图使其部分:
表达式"_[a-zA-Z0-9]"
满足条件“如果字符串从下划线字符开始,则第二个字符是字母或数字”。
表达式"\\D"
满足条件“字符串不能以数字开头”。
表达式"[a-zA-Z]"
满足条件“字符串从大写或小写字母开始”。
表达式的最后一部分很简单-"w*"
。
当我尝试将所有这些"(_[a-zA-Z0-9])*|(\\D)*|([a-zA-Z])*w*"
放在一起时,获得的regexp无法正常工作。
以下字符串b33
和_n1
不适合我的正则表达式,但字符串__
适合。
如何修复我的正则表达式?
最佳答案
您可以使用
^(?![0-9]|__|_$)[a-zA-Z0-9_]+$
或者,用速记:
^(?!\d|__|_$)\w+$
请参见regex demo
细节
^
-字符串的开头(在.matches()
中隐含)(?![0-9]|__|_$)
-在此之后,不能有数字或__
子字符串,或_
后跟字符串末尾[a-zA-Z0-9_]+
-1+ ASCII字母,数字或_
(也可以使用*
匹配空字符串)$
-字符串结尾(在.matches()
中隐含)。在Java中,将其与
.matches()
省略锚点一起使用:s.matches("(?!\\d|__|_$)\\w+")
关于java - 字符串只能包含[a-zA-Z0-9_]符号(可以从一个字母开始,但不能包含“_”),不能从数字开始,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57801221/