C语言中识别标识符的常规定义如下:
letter -> a|b|...z|A|B|...|Z|_
digit -> 0|1|...|9
identifier -> letter(letter|digit)*
这个定义将生成以下形式的标识符
标识符:[_a-zA-Z][_a-zA-Z0-9]*
我现在的问题是如何限制生成的标识符长度不超过31个字符。需要对正则表达式定义进行哪些更改或如何编写正则表达式来限制长度不超过指定长度。请问是否有人可以帮忙。谢谢。
C语言中识别标识符的常规定义如下:
letter -> a|b|...z|A|B|...|Z|_
digit -> 0|1|...|9
identifier -> letter(letter|digit)*
这个定义将生成以下形式的标识符
标识符:[_a-zA-Z][_a-zA-Z0-9]*
我现在的问题是如何限制生成的标识符长度不超过31个字符。需要对正则表达式定义进行哪些更改或如何编写正则表达式来限制长度不超过指定长度。请问是否有人可以帮忙。谢谢。
你要寻找的正则表达式是:
[_a-zA-Z][_a-zA-Z0-9]{0,30}
它将匹配一个跟随着 X
个下划线、字母或数字的下划线或字母,其中 0 <= X <= 30
[_a-zA-Z0-9]
的长度。上述正则表达式意味着从 [_a-zA-Z]
中选取1个字符,从 [_a-zA-Z0-9]
中最多选取30个字符。 - Ojasv singh更新:更新正则表达式,使标识符不以数字开头。
为了限制长度,通常使用{}
。
例如,您的正则表达式是[_a-zA-Z0-9]+
。这意味着允许任何字母数字值和下划线,并且长度必须大于等于1。如果我们想将其限制在不超过31个字符,则可以将正则表达式重写为:
[_a-zA-Z0-9]{1,31}
{1,31} 表示接受长度大于等于1且小于等于31的字母数字值。
然而,上述正则表达式也意味着标识符可以以数字开头。请注意,提供了三个范围:a-z,A-Z和0-9。为了将标识符限制为以字母或下划线开头,后跟字母、数字或下划线的正则表达式如下所示:
[_a-zA-Z][_a-zA-Z0-9]{0,30}
正则表达式的第一部分[_a-zA-Z]
强制标识符以字符或下划线开头。它还确保标识符不为空。正则表达式的其余部分[_a-zA-Z0-9]{0-30}
确保只接受字符、下划线和数字,并且除了第一个字符外,最多可以添加30个字符到标识符中。
您可以对您的正则表达式进行相应的更改。
[a-zA-Z][a-zA-Z0-9]{0-30}
you forgot about _
(Underline) and that must be [a-zA-Z_][a-zA-Z0-9_]{0-30}
- Mamrezo{0-30}
should be {0, 30}
- Amin Ya
(?!\d)\w*
来缩短。 - darw