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の3つの範囲が提供されていることに注意してください。識別子をアルファベットまたはアンダースコアで始まり、その後にアルファベット、数字、またはアンダースコアが続くように制限するには、次の正規表現を使用できます。

[_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 に答える