我想组成一个regex ro来识别变量名的声明。用户将输入他们希望作为变量名的字符串,程序必须检查变量是否有效。
我一整天都在努力,但没能得到正确的答案。
发布于 2013-07-10 06:49:47
我们要做的第一件事是为第一个字符收集所有有效字符的列表:
[a-zA-Z_$]然后是其他角色:
[a-zA-Z_$0-9]我们希望匹配整个字符串,并且可以有0或更多的其他字符,因此regex变成:
^[a-zA-Z_$][a-zA-Z_$0-9]*$我允许正则表达式中的第一个字符(以及美元符号)使用大写字符,因为这是对有效性的测试,而不是对格式良好的变量的测试。(请注意,常量应包含在所有大写中,包括第一个字母。)
发布于 2013-07-10 06:48:31
你可以用这个:
"^[_a-z]\\w*$"它的工作原理:
^ // Match at the beginning
[_a-z] // Match either "_", or "a-z" at the beginning
\\w* // Match zero or more of characters - [a-zA-Z0-9_], after the beginning
$ // Till the end注意-根据Java命名约定,变量不应该以大写字母开头,所以我没有在第一个字符类中包含- [A-Z]。
而且,由于Java允许在变量名中使用$,即使在开始时,您也应该考虑将它添加到允许的字符集中。因此,您可以将上述regex修改为:
"^[_$a-z][\\w$]*$"发布于 2013-07-10 06:56:36
这能做你想做的事:
"^[a-z_]\\w*$"解释:
^:从字符串的开头开始[a-z_]:匹配单个小写字母或下划线\\w*:匹配零或多个单词字符(\w等效于[a-zA-Z_0-9])$:匹配到字符串的末尾。编辑:更新,以反映“美元标志允许”和“名称不应以大写开头”指出的其他人。谢谢你的提醒。
编辑2:在做了一些研究之后,我又删除了美元符号的匹配。虽然技术上是允许的,但在这种情况下,它肯定是不好的风格,因此不鼓励,就像变量以大写字母开头一样。另见https://stackoverflow.com/a/4636667/1814922
https://stackoverflow.com/questions/17564088
复制相似问题