Điều tôi cần là kiểm tra xem chuỗi đã cho có khớp một phần với regex đã cho hay không. Ví dụ: đối với regex ab[0-9]c
, các chuỗi "a", "ab", "ab3" và "b3c" sẽ "khớp", nhưng không phải là chuỗi "d", "abc" hoặc "a3c". Những gì tôi đã làm là clunky a(?:b(?:[0-9](?:c)?)?)?
(chỉ hoạt động đối với một số kết quả khớp một phần, cụ thể là những từ "bắt đầu"), nhưng vì đây là một phần của API, tôi muốn cung cấp cho người dùng trực quan hơn cách nhập regexps phù hợp của họ.Có cách nào thanh lịch để thực hiện các kết quả regex một phần trong Java không?
Trong trường hợp mô tả không rõ ràng (và tôi nhận ra nó có thể không!), Điều này sẽ được sử dụng để xác thực nhập văn bản trên hộp văn bản. Tôi muốn ngăn chặn bất kỳ chỉnh sửa nào có thể dẫn đến một chuỗi không hợp lệ, nhưng tôi không thể chỉ khớp chuỗi với một regex thông thường, vì cho đến khi nó được nhập đầy đủ, nó sẽ không khớp. Ví dụ, sử dụng regex ở trên (ab[0-9]c
), khi tôi cố gắng nhập 'a', nó không được phép, vì chuỗi "a" không khớp với regex.
Về cơ bản, đó là một loại đảo ngược startsWith()
hoạt động trên regexps. (new Pattern("ab[0-9]c").startsWith("ab3")
phải trả lại true
.)
Bất kỳ ý tưởng nào?
FYI: 'a (?: B (?: [0-9] (?: c)?)?)?' Sẽ khớp * bất kỳ * chuỗi nào chứa "a", chẳng hạn như "jazz ". Bạn muốn sử dụng '^ a (?: B (?: [0-9] (?: c)?)?)? $' Để bạn khớp với toàn bộ chuỗi. – Kip
Tất cả các regex khách hàng có sử dụng đơn giản như 'ab [0-9] c' hay bạn sẽ cần kết hợp phức tạp hơn (tức là với các nhóm con)? – Kip
Rất tiếc ... vâng,^và $ được thêm vào regexp tự động, đó là lý do tôi bỏ qua để thêm chúng, cảm ơn. Và không, các regexps không đơn giản như vậy, chúng có thể khá phức tạp, mặc dù không xa như yêu cầu các nhóm con. – Tonio