đây là regex của tôi:Nhiều trận đấu với delimiter
([+-]*)(\\d+)\\s*([a-zA-Z]+)
- nhóm no.1 = ký
- nhóm số 2 = số nhân
- nhóm đơn vị số 3 = thời gian
Điều này là, tôi muốn khớp với đầu vào đã cho nhưng nó có thể bị "chuỗi". Vì vậy, đầu vào của tôi nên hợp lệ nếu và chỉ khi toàn bộ mẫu lặp lại mà không có bất kỳ điều gì giữa các lần xuất hiện đó (ngoại trừ khoảng trắng). (Chỉ một trận đấu hoặc nhiều trận đấu bên cạnh nhau với các khoảng trống có thể giữa chúng).
ví dụ hợp lệ:
1day
+1day
-1 day
+1day-1month
+1day +1month
+1day +1month
ví dụ không hợp lệ:
###+1day+1month
+1day###+1month
+1day+1month###
###+1day+1month###
###+1day+1month###
tôi trường hợp của tôi, tôi có thể sử dụng matcher.find() phương pháp
, điều này sẽ làm các trick nhưng nó sẽ chấp nhận đầu vào như thế này:+1day###+1month
không hợp lệ đối với tôi.
Bất kỳ ý tưởng nào? Điều này có thể được giải quyết với nhiều điều kiện IF và nhiều kiểm tra cho các chỉ mục bắt đầu và kết thúc nhưng tôi đang tìm kiếm giải pháp thanh lịch.
EDIT
Các regex gợi ý trong ý kiến dưới đây ^\s*(([+-]*)(\d+)\s*([a-zA-Z]+)\s*)+$
sẽ phần nào làm các trick nhưng nếu tôi sử dụng nó trong các mã dưới nó trả về kết quả khác với kết quả tôi đang tìm kiếm. Vấn đề là tôi không thể sử dụng (*my regex*)+
vì nó sẽ khớp với toàn bộ sự việc.
Các giải pháp có thể để phù hợp với toàn bộ đầu vào với ^\s*(([+-]*)(\d+)\s*([a-zA-Z]+)\s*)+$
và sau đó sử dụng ([+-]*)(\\d+)\\s*([a-zA-Z]+)
với matcher.find()
và matcher.group(i)
để trích xuất mỗi trận đấu và nhóm của mình. Nhưng tôi đang tìm kiếm giải pháp thanh lịch hơn.
Thx, để trả lời. Bạn nói đúng, nhưng tôi đã không mô tả nó một cách chính xác. Nếu đầu vào của tôi là hợp lệ thì tôi cần phải trích xuất cho mỗi khớp với giá trị đơn vị dấu, số nhân và thời gian. Với giải pháp của bạn, nó sẽ trả về '+ 1 ngày + 1 tháng' thành 1 trận đấu thay vì hai '+ 1 ngày' và '+ 1 tháng' – user1610458
Bạn chắc chắn có thể lặp qua tất cả các nhóm trong trận đấu. Nếu điều đó không hoạt động tốt cho nhu cầu của bạn, có thể đơn giản hơn để gọi 'matcher.find' với'^\ s * ([+ -] *) (\ d +) \ s * ([a-zA-Z ] +) 'nhiều lần, chuyển sang chỉ mục bắt đầu tiếp theo mỗi lần. –