首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何形成识别变量名称正确声明的正则表达式

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

Stack Overflow用户
提问于 2013-07-10 06:45:57
回答 3查看 34.8K关注 0票数 17

我想组成一个regex ro来识别变量名的声明。用户将输入他们希望作为变量名的字符串,程序必须检查变量是否有效。

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

我一整天都在努力,但没能得到正确的答案。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-10 06:49:47

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

代码语言:javascript
复制
[a-zA-Z_$]

然后是其他角色:

代码语言:javascript
复制
[a-zA-Z_$0-9]

我们希望匹配整个字符串,并且可以有0或更多的其他字符,因此regex变成:

代码语言:javascript
复制
^[a-zA-Z_$][a-zA-Z_$0-9]*$

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

票数 47
EN

Stack Overflow用户

发布于 2013-07-10 06:48:31

你可以用这个:

代码语言:javascript
复制
"^[_a-z]\\w*$"

它的工作原理:

代码语言:javascript
复制
^        // 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修改为:

代码语言:javascript
复制
"^[_$a-z][\\w$]*$"
票数 7
EN

Stack Overflow用户

发布于 2013-07-10 06:56:36

这能做你想做的事:

代码语言:javascript
复制
"^[a-z_]\\w*$"

解释:

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

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17564088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档