我正在解决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/

10-12 00:13
查看更多