问题是根据这些规则识别一系列字符串中的有效用户名。
1.用户名可以包含字母数字字符和/或下划线(_)。
2.用户名必须以字母字符开头。
输入和输出已经为我处理,他们只想要正则表达式。
我有“^ [a-zA-Z] [a-zA-Z0-9 _] + $ {8,30}”
我相信在字符串的开头有一个字母字符,后跟字母数字和下划线字符到字符串的末尾,最少8个字符,最多30个。这个正则表达式适用于5个字符串8例。它不起作用的大多数情况都很长,我不会在这里张贴它们,但有一种情况它不起作用,简单而复杂。
“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaab”
我的正则表达式说它是有效的,根据规则,我认为它应该是有效的。答案说这是无效的。根据我上面提到的规则,我错过了为什么这应该是无效的?
答案 0 :(得分:4)
正确的正则表达式是
^[a-zA-Z][a-zA-Z0-9_]{7,29}$
请参阅显示aaaaaaaaaaaaaaaaaaaaaaaaaaaaaab
未通过测试的regex demo。
当您使用${8,30}
时,表示匹配字符串的结尾8到30次。
我的模式匹配第一个字母字符,然后是7到29个字母,数字和下划线(总共8到30个)。
请注意,您可以将其写为
^[a-zA-Z]\w{7,29}$
注意:在Java中,在将模式声明为Java C字符串时,必须加倍反斜杠。此外,如果您使用^
,则不需要$
和.matches()
:
Boolean matched = input.matches("[a-zA-Z]\\w{7,29}");
答案 1 :(得分:1)
此表达式传递所有测试用例
String pattern ="^[a-zA-Z][a-zA-Z0-9_]{7,29}$";