2013-02-19 21 views
15

Die reguläre Definition für Bezeichner in der Programmiersprache C Erkennung verwendet, wird durchDarstellen Bezeichner Regular Expression

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

Diese Definition wird

Kennung Bezeichner der Form erzeugen: [_a-zA-Z][_a-zA-Z0-9]*

Meine Frage ist jetzt Wie begrenzen Sie die Länge des generierbaren Bezeichners auf maximal 31 Zeichen? Welche Änderungen müssen in der regulären Definition vorgenommen werden oder wie wird ein regulärer Ausdruck geschrieben, um ihn auf nicht mehr als die angegebene Länge zu begrenzen? Könnte jemand bitte helfen. Vielen Dank.

Antwort

20

Der reguläre Ausdruck Sie suchen, ist:

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

Es wird ein oder Brief unterstreichen übereinstimmen gefolgt von X unterstreicht, Buchstaben oder Zahlen, wo 0 <= X <= 30

+0

Ich habe es in dem Moment, als die anderen beiden Benutzer ihre Vorschläge gaben ... danke sowieso. –

+0

@jerisalan ok. habe gerade meine Frage gestellt, da Sie auf beiden Antworten "jede mögliche Weise, die reguläre Definition zu ändern, um die gleiche Änderung herbeizuführen" gestellt haben. –

0

Um die Länge zu begrenzen, werden normalerweise {} verwendet.
Zum Beispiel war Ihr Regex [a-zA-Z0-9]+. Mittel erlauben beliebige alphanumerische Werte und die Länge muss größer als 1 ist gleich Wenn wir 31 Zeichen beschränken möchten überschreiten sie nicht, können wir die Regex umschreiben als:

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

{1,31} zeigt an Das akzeptiert alphanumerische Werte mit einer Länge größer als gleich 1 und kleiner als gleich 31.
Sie können entsprechende Änderungen an Ihrer Regex vornehmen.

+0

Danke ... jede mögliche Weise, die reguläre Definition zu ändern, um das sa zu verursachen ich ändere mich. –

+0

@jerisalan sehe meine Antwort. –

+4

Der Bezeichner darf nicht mit einer Ziffer beginnen und "_" enthalten. –