我正在解决 Java 中的一个问题,需要创建一个正则表达式,它检查字符串中的下一个规则:字符串只能包含数字、大小写字母和下划线字符"_";字符串不能以数字开头;如果字符串以下划线开头,则第二个字符不能是下划线,即必须是数字或字母;该字符串只能由一个字符组成,但该字符不能是下划线;我不明白如何制作正则表达式的第一部分。我尝试将其部分部分地制作:表达式"_[a-zA-Z0-9]"满足条件“如果字符串以下划线字符开头,则第二个字符是字母或数字”。表达式"\\D"满足条件“字符串不得以数字开头”。表达式"[a-zA-Z]"满足条件“字符串以大写或小写字母开头”。表达式的最后一部分很简单—— "w*"。当我尝试将所有这些放在一起时"(_[a-zA-Z0-9])*|(\\D)*|([a-zA-Z])*w*",获得的正则表达式无法正常工作。以下字符串b33不_n1适合我的正则表达式,但该字符串__适合它。如何修复我的正则表达式?
2 回答
慕妹3146593
TA贡献1820条经验 获得超9个赞
尽管如此,我想提供一种仅部分使用正则表达式的替代方案。我经常也在网上搜索紧凑的正则表达式,并经常得到答案,但两个月后我不知道该表达式的含义。
如果您不是像 Wiktor Stribiżew 这样的正则表达式天才,并且希望第一眼看到已验证的内容,我建议您采用以下方法
static boolean check(String s){
if(s.matches("[a-zA-Z0-9_]+")){
if( !Character.isDigit(s.charAt(0))){
if(!s.startsWith("__")){
return !(s.length() == 1 && s.equals("_"));
}
}
}
return false;
}
添加回答
举报
0/150
提交
取消