2013-08-01 38 views
7

Tôi đang cố gắng để hiểu được lượng hóa sau biểu thức chính quy (một chỉ là một dấu hiệu điển hình ở đây):Làm cách nào để {n}? và {n} khác nhau?

a{n}? 

Làm thế nào để dấu hỏi ảnh hưởng đến trận đấu của biểu thức trên? Và nó khác với những điều sau đây như thế nào?

a{n} 

tôi dự kiến ​​sẽ có các mô hình aa{1}?a để phù hợp với cả hai aaaaa ví dụ. Trong khi khớp với số aaa, aakhông phải là một kết quả phù hợp. Mẫu a(a{1})?a không khớp với cả hai, do đó dấu ngoặc đơn tạo nên sự khác biệt ở đây.


Lưu ý: Các bài viết MSDN Quantifiers in Regular Expressions bang cho cả hai:

The {n} quantifier matches the preceding element exactly n times, where n is any integer.

Đối {n}?, nó bổ sung thêm những điều sau đây, không quá hữu ích phần:

It is the lazy counterpart of the greedy quantifier {n}+.

+1

Điều này phải làm gì với C#? –

+0

@AustinHenley có thể là anh ta chỉ trong ngữ cảnh của C# Regex. – TheVillageIdiot

+0

Dấu chấm hỏi có thể làm cho biến không thể thực hiện được. – Max

Trả lời

7

Không có gì. Bài viết tuyên bố:

The {n} quantifier matches the preceding element exactly n times, where n is any integer. {n} is a greedy quantifier whose lazy equivalent is {n}?.

The {n}? quantifier matches the preceding element exactly n times, where n is any integer. It is the lazy counterpart of the greedy quantifier {n}+.

Lưu ý rằng văn bản hoàn toàn giống nhau. Về cơ bản, thêm ? không thay đổi hành vi của trình định lượng. Có vẻ như công cụ biểu thức chính quy của .NET hỗ trợ {n}? thay thế cho {n}.


Điều thú vị là, bài viết này không xuất hiện để chứa một lỗi:

The {n,} quantifier matches the preceding element at least n times, where n is any integer. {n,} is a greedy quantifier whose lazy equivalent is {n}?.

này là sai. Số tiền tương đương lười biếng của {n,}{n,}?không giống như {n}?.

+0

Vì vậy, có vẻ như phiên bản có dấu hỏi ('{n}?') chỉ được thực hiện (và được ghi lại) để hoàn thành vì các anh chị em của nó '{n,}?' và '{n, m}?' cũng tồn tại? –

+1

@MariusSchulz Vâng, tôi muốn nói như vậy. Bài viết thậm chí còn cung cấp một ví dụ bằng cách sử dụng '{n}?'nhưng mã đó hoạt động giống nhau nếu bạn thay thế nó bằng' {n} '. –

+8

Một số người, khi đối mặt với một vấn đề, hãy nghĩ rằng "Tôi biết, tôi sẽ sử dụng các biểu thức chính quy." Bây giờ họ có '{n}?' Vấn đề. –

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