23

在 C 编程语言中识别标识符的常规定义由下式给出

letter -> a|b|...z|A|B|...|Z|_
digit -> 0|1|...|9
identifier -> letter(letter|digit)*

此定义将生成形式的标识符

标识符:[_a-zA-Z][_a-zA-Z0-9]*

我现在的问题是如何将可以生成的标识符的长度限制为不超过 31 个字符。正则定义需要做哪些改变或者如何编写正则表达式来限制它不超过指定的长度。谁能帮忙。谢谢。

4

2 回答 2

34

您正在寻找的正则表达式是:

[_a-zA-Z][_a-zA-Z0-9]{0,30}

它将匹配下划线或后跟下划线字母数字的字母,其中X 0 <= X <= 30

于 2013-02-19T09:35:38.177 回答
0

更新: 更新了正则表达式,使得标识符不以数字开头。

为了限制长度,{}通常使用。
例如,您的正则表达式是[_a-zA-Z0-9]+. 意思是,允许任何字母数字值和下划线,并且长度必须大于等于 1。如果我们想限制它不超过 31 个字符,我们可以将正则表达式重写为:

[_a-zA-Z0-9]{1,31}

{1,31} 表示这将接受长度大于等于 1 且小于等于 31 的字母数字值。

但是,上面的正则表达式也意味着标识符可以以数字开头。请注意,提供了三个范围:az、AZ 和 0-9。要限制标识符以字母或下划线开头,后跟字母、数字或下划线,可以使用以下正则表达式:

[_a-zA-Z][_a-zA-Z0-9]{0,30}

第一部分[_a-zA-Z]强制标识符以字符或下划线开头。它还确保标识符不为空。正则表达式的其余部分[_a-zA-Z0-9]{0-30}确保只接受字符、下划线和数字,并且除了第一个字符之外,最多可以向标识符添加 30 个字符。

您可以对您的正则表达式进行相应的更改。

于 2013-02-19T09:27:25.790 回答