2016-08-28 31 views
6

Tôi đang sử dụng regex này ^x{3}y{3}$ để kiểm tra ví dụ chuỗi này: xxxyyy, trong đó số lượng x 's giống như số lượng y' s (trong ví dụ của tôi là 3). Nhưng vấn đề là tôi không biết số lần lặp lại (nó nằm trong phạm vi từ 0 đến 10), do đó, 3 phải được thay thế bằng nội dung nào đó trừu tượng.Làm cách nào để sử dụng lại số lượng nhóm phù hợp với regex?

Tôi có thể sử dụng ^x*y*$ hoặc ^x{0,10}y{0,10}$, nhưng điều này sẽ không hoạt động khi số lượng x khác với số lượng y.

Tôi đang tìm một cái gì đó như \1, được sử dụng để tái sử dụng nhóm phù hợp, nhưng trong trường hợp của tôi, tôi muốn sử dụng lại số lượng kết quả nhóm cho x.

+0

Không thể có trong regex. Bạn cần sự giúp đỡ của một ngôn ngữ bên ngoài cho điều đó. Vì lợi ích của sự hoàn chỉnh, hãy nói bạn đang sử dụng công cụ regex nào. (Tôi nghĩ rằng đây là một tập hợp con của vấn đề palindrome, cũng không thể được giải quyết bằng regex.) Xem http://stackoverflow.com/questions/233243/how-to-check-that-a-string-is- a-palindrome-using-regular-expressions) – Tomalak

+0

@Tomalak Ông đã cung cấp liên kết: https://regex101.com/r/rP7wB8/2 Vì vậy, tôi nghĩ rằng ông đang sử dụng PCRE? –

+0

@Nehal Tôi không biết. Liên kết đó không đủ để rút ra kết luận. – Tomalak

Trả lời

2

Vì bạn đã có một giới hạn trên cố định, bạn chỉ có thể liệt kê các trận đấu ra longhand:

^(x{10}y{10}|x{9}y{9}|x{8}y{8}|x{7}y{7}|x{6}y{6}|x{5}y{5}|x{4}y{4}|x{3}y{3}|x{2}y{2}|xy)?$ 

(Các ? xử lý của bạn "zero của mỗi" hợp cụ thể.)

Rõ ràng nếu xy dài trong thực tế sau đó sẽ có rất nhiều sự lặp lại ở đây.

Một cách tiếp cận khác là liên tục thay thế xy bằng một chuỗi rỗng và kiểm tra xem bạn có kết thúc chuỗi rỗng không (vì mỗi khi bạn xóa một cặp, bạn sẽ mang lại một cặp khác).

+0

Cảm ơn bạn, nhưng 10 chỉ là ví dụ, tôi phải kiểm tra giới hạn trên thực tế nhưng nó là trên 100 với chắc chắn – Termininja

+1

@Termininja Bạn có thể tự động tạo ra biểu thức này, vì vậy nó sẽ không quan trọng bao nhiêu lặp lại bạn mong đợi. – Tomalak

+0

Cách tiếp cận thực dụng, rất hay. – Tomalak

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