将标识符与字符串,数字和_匹配

时间:2012-10-18 12:21:15

标签: java regex jflex

[a-zA-Z]_*[a-zA-Z0-9]*  

我的目标是匹配:

astring_something;
helloall90

但不是:

Astring
_helloall

我的正则表达式正在保护我,标识符应该以小写字母开头。但它不适用于_个案例。传递字符串:

astring_something;

未正确识别。已将其标识为astringsomething,而忽略_

我犯了错误?

3 个答案:

答案 0 :(得分:2)

我想你希望它以一个字母开头,后跟零个或多个字母,数字或下划线。如果是这样,您需要将下划线移动到第二组字符中。

变化:

[a-zA-Z]_*[a-zA-Z0-9]*

要:

[a-zA-Z][a-zA-Z0-9_]*

或者,如果它必须以小写字母开头:

[a-z][a-zA-Z0-9_]*

答案 1 :(得分:1)

您目前只在下划线前匹配单个字符。

[a-zA-Z]*_[a-zA-Z0-9]*  

这是否是你真正想要的是一个不同的问题;例如,有多个下划线的东西呢?

答案 2 :(得分:0)

尝试

^[a-z]+_*[a-zA-Z0-9]+

哪里......

^[a-z]+

表示必须以一个或多个小写字母开头,然后是......

_*

零个或多个_字符,后跟......

[a-zA-Z0-9]*

零个或多个字母数字字符。

此模式将匹配astring_something和helloall90但不匹配_helloall和Astring