2013-02-19 39 views
15

Định nghĩa thường xuyên cho nhận định trong ngôn ngữ lập trình C được cho bởiĐại diện định sử dụng Regular Expression

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

Định nghĩa này sẽ tạo ra định dạng

định danh: [_a-zA-Z][_a-zA-Z0-9]*

câu hỏi của tôi bây giờ là làm cách nào để bạn giới hạn độ dài của số nhận dạng có thể được tạo không quá 31 ký tự. Những thay đổi cần phải được thực hiện trong định nghĩa thông thường hoặc cách viết biểu thức chính quy để giới hạn nó không quá chiều dài được chỉ định. Bất cứ ai có thể vui lòng giúp đỡ. Cảm ơn.

Trả lời

20

Các biểu hiện thường xuyên bạn đang tìm kiếm là:

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

Nó sẽ phù hợp với một nhấn hoặc thư sau bởi Xnhấn, chữ hoặc số, nơi 0 <= X <= 30

+0

Tôi nhận được khoảnh khắc hai người dùng khác đưa ra đề xuất của họ ... cảm ơn anyways. –

+0

@jerisalan ok. chỉ cần đặt câu hỏi của tôi kể từ khi bạn hỏi về cả hai câu trả lời "bất kỳ cách nào có thể để thay đổi định nghĩa thông thường để mang lại sự thay đổi tương tự". –

0

Để giới hạn độ dài, {} thường được sử dụng.
Ví dụ: regex của bạn là [a-zA-Z0-9]+. Phương tiện, cho phép bất kỳ giá trị chữ và số, và chiều dài phải lớn hơn tương đương với 1. Nếu chúng ta muốn giới hạn nó không quá 31 ký tự, chúng ta có thể viết lại regex như:

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

{1,31} chỉ ra rằng điều này sẽ chấp nhận giá trị chữ và số có chiều dài lớn hơn bằng 1 và nhỏ hơn bằng 31.
Bạn có thể thực hiện các thay đổi tương ứng với regex của mình.

+0

Cảm ơn ... mọi cách có thể để thay đổi định nghĩa thông thường để mang về sa tôi thay đổi. –

+0

@jerisalan xem câu trả lời của tôi. Mã định danh –

+4

không được bắt đầu bằng một chữ số và có thể bao gồm '_'. –

Các vấn đề liên quan