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

TK *_*eah 5 java regex

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

  1. 变量名的第一个字符必须是字母或下划线.它不应该以数字开头.
  2. 变量名中不允许使用逗号和空格.
  3. 变量名中不允许使用下划线以外的特殊符号.

我一整天都在努力,无法得到正确的答案.

Ale*_*ier 28

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

[a-zA-Z_$]
Run Code Online (Sandbox Code Playgroud)

然后是其他人物:

[a-zA-Z_$0-9]
Run Code Online (Sandbox Code Playgroud)

我们想匹配整个字符串,我们可以有0个或更多的其他字符,所以正则表达式变成:

^[a-zA-Z_$][a-zA-Z_$0-9]*$
Run Code Online (Sandbox Code Playgroud)

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


Roh*_*ain 5

你可以使用这个:

"^[_a-z]\\w*$"
Run Code Online (Sandbox Code Playgroud)

这个怎么运作:

^        // 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
Run Code Online (Sandbox Code Playgroud)

注-根据Java命名公约,一个变量应该不会有启动大写字母,所以我不包括-[A-Z]在第一个字符类。

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

"^[_$a-z][\\w$]*$"
Run Code Online (Sandbox Code Playgroud)