如何为以开头的字母,下划线或数字的字母和中间的字母或数字的字符串构建显式正则表达式?
到目前为止可以在测试案例中看到的模式。 https://regex101.com/r/JedpJu/3
我想过滤出如下字符串。
_(仅下划线)
9a_d(以数字开头的字符串)
ad_(以下划线结尾)
编辑
ad * d_rr(除下划线外,也不允许使用任何特殊字符。)
答案 0 :(得分:1)
您可以使用
^[A-Za-z](?:[A-Za-z0-9_]*[A-Za-z0-9])?$
与
相同^[A-Za-z](?:\w*[A-Za-z0-9])?$
请参见regex demo
在Java中,您可以将其与.matches()
一起使用,并省略锚点:
s.matches("[A-Za-z](?:[A-Za-z0-9_]*[A-Za-z0-9])?")
s.matches("[A-Za-z](?:\\w*[A-Za-z0-9])?")
如果字符串可能包含换行符,请使用
s.matches("(?s)[A-Za-z](?:[A-Za-z0-9_]*[A-Za-z0-9])?")
s.matches("(?s)[A-Za-z](?:\\w*[A-Za-z0-9])?")
其中(?s)
启用.
来匹配换行符。