如何形成正则表达式以识别变量名称的正确声明

时间:2013-07-10 06:45:57

标签: java regex

我想形成一个正则表达式,识别变量名称的声明。用户将输入他们想要的变量名字符串,程序必须检查变量是否有效。

  1. 变量名的第一个字符必须是字母或下划线。它不应该以数字开头。
  2. 变量名中不允许使用逗号和空格。
  3. 变量名称中不允许使用下划线以外的特殊符号。
  4. 我一整天都在努力,无法得到正确的答案。

3 个答案:

答案 0 :(得分:26)

我们要做的第一件事是收集第一个字符的所有有效字符的列表:

[a-zA-Z_$]

然后是其他角色:

[a-zA-Z_$0-9]

我们希望匹配整个字符串,我们可以有0个或更多其他字符,因此正则表达式变为:

^[a-zA-Z_$][a-zA-Z_$0-9]*$

我允许正则表达式中第一个字符中的大写字符(以及美元符号),因为这是对有效性的测试,而不是对格式良好的变量的测试。 (请注意,常量全部大写,包括第一个字母。)

答案 1 :(得分:3)

您可以使用:

"^[_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命名约定,变量应该大写字母开头,所以我没有包括 - {{ 1}}在第一个字符类中。

此外,由于Java允许在变量名中使用[A-Z],即使在开始时,也应考虑将其添加到允许的字符集中。因此,您可以将上述正则表达式修改为:

$

答案 2 :(得分:2)

这将做你想要的:

"^[a-z_]\\w*$"

说明:

  • ^:从字符串的开头
  • 开始
  • [a-z_]:匹配单个小写字母或下划线
  • \\w*:匹配零个或多个字词(\w相当于[a-zA-Z_0-9]
  • $:匹配到字符串的结尾。

编辑:已更新以反映其他人指出的“允许的美元符号”和“名称不应以大写字母开头”。谢谢你的提醒。

编辑2 :在做了一些研究后,我再次删除了美元符号的匹配。虽然在技术上是允许的,但在这种情况下它肯定是不好的风格,因此不鼓励,就像以大写字母开头的变量一样。另请参阅https://stackoverflow.com/a/4636667/1814922