2012-07-12 28 views
9

Tôi có vấn đề về regex tôi dường như không thể giải quyết được. Tôi thực sự không biết liệu regex có thể làm điều này hay không, nhưng tôi cần phải kết hợp một loạt các ký tự n lần ở cuối mẫu. ví dụ: blahblah [A-Z] {n} Vấn đề là bất kỳ ký tự nào phù hợp với phạm vi kết thúc đều phải giống nhau.khớp với cùng một ký tự không xác định nhiều lần

Ví dụ, tôi muốn để phù hợp với

  • blahblahAAAAA
  • blahblahEEEEE
  • blahblahQQQQQ

nhưng không

  • blahblahADFES
  • blahblahZYYYY

Có một số mẫu regex có thể thực hiện việc này không?

+0

Xem câu hỏi này: http://stackoverflow.com/questions/7147810/regular-expression-same-character-3-times – Palladium

+0

cảm ơn câu trả lời, công trình này tuyệt vời –

Trả lời

18

Bạn có thể sử dụng mô hình này: blahblah([A-Z])\1+

Các \1 là một back-tham chiếu đến các nhóm chụp đầu tiên, trong trường hợp này ([A-Z]). Và + sẽ khớp với ký tự đó một hoặc nhiều lần. Để giới hạn, bạn có thể thay thế số + bằng số lần lặp lại cụ thể bằng cách sử dụng {n}, chẳng hạn như \1{3} sẽ khớp với số đó ba lần.

Nếu bạn cần toàn bộ chuỗi để phù hợp sau đó hãy chắc chắn tiền tố với ^ và kết thúc bằng $, tương ứng, do đó mô hình trở nên ^blahblah([A-Z])\1+$

Bạn có thể đọc thêm về back-references here.

0

blahblah(.)\1*\b sẽ hoạt động ở hầu hết các hương vị ngôn ngữ. (.) chụp một trong mọi thứ, sau đó \1* khớp với (số trận đầu tiên) bất kỳ số lần nào.

2

Trong hầu hết các triển khai regex, bạn có thể thực hiện việc này bằng cách tham chiếu nhóm chụp trong regex của bạn. Ví dụ, bạn có thể sử dụng sau đây để phù hợp với nhân vật chữ hoa cùng năm lần:

blahblah([A-Z])\1{4} 

Lưu ý rằng để phù hợp với regex n Đôi khi, bạn cần phải sử dụng \1{n-1} vì một trận đấu sẽ đến từ các nhóm chụp.

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