2013-02-19 17 views
15

Cプログラミング言語で識別子を認識するための定期的な定義は、識別子表す識別子が

フォームの識別子を生成します

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

この定義で与えられます生成される識別子の長さを31文字以下に制限する方法です。正規の定義で何を変更する必要があるか、正規表現を書いて指定された長さ以下に制限する方法。誰も助けてくれませんか?ありがとう。

答えて

20

あなたが探している正規表現は次のとおりです。

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

それはアンダーXによって以下か手紙がアンダースコアに一致します文字または番号0 <= X <= 30

+0

他の2人のユーザーが提案をくれた瞬間...とにかく感謝します。 –

+0

@jerisalan ok。両方の答えに「同じ変更をもたらすために定期的な定義を変更する可能な方法」と尋ねたので、ちょうど私の疑問を置いた。 –

0

通常、長さを制限するには、{}が使用されます。
たとえば、あなたの正規表現は[a-zA-Z0-9]+でした。

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

{1,31}を示しますように、我々は正規表現を書き換えることができ、この手段は、任意の英数字の値を可能にし、我々はそれが31文字を超えないように制限する場合は長さが1に等しいより大きくなければなりませんこれは、長さが1以上で31未満の英数字の値を受け入れることを意味します。
正規表現をそれぞれ変更することができます。

+0

ありがとう... saを呼び出すために定期的な定義を変更する方法私は変わる。 –

+0

@jerisalan私の答えを参照してください。 –

+4

識別子は数字で始まってはならず、 '_'を含みます。 –