Tôi có một danh sách các chuỗi. Một số trong số họ có hình thức 123-...456
. Phần biến "..." có thể là:
- chuỗi "apple" theo sau là dấu gạch nối, vd
123-apple-456
- chuỗi "chuối" theo sau là dấu gạch nối, vd
123-banana-456
- một chuỗi trống, ví dụ
123-456
(lưu ý chỉ có một dấu gạch nối)
Bất kỳ từ nào khác ngoài "táo" hoặc "chuối" đều không hợp lệ.
Đối với ba trường hợp này, tôi muốn lần lượt ghép "táo", "chuối" và "". Lưu ý rằng tôi không bao giờ muốn chụp dấu gạch nối, nhưng tôi luôn muốn khớp nó. Nếu chuỗi không có dạng 123-...456
như mô tả ở trên, thì không có kết quả khớp nào cả.
Làm thế nào để tôi viết một biểu thức chính quy để làm điều này? Giả sử tôi có một hương vị cho phép các nhóm lookahead, lookbehind, lookaround và không bắt giữ.
Quan sát chính ở đây là khi bạn có "quả táo" hoặc "quả chuối", bạn cũng phải có dấu gạch nối, nhưng bạn không muốn ghép nó. Và khi bạn khớp chuỗi trống, bạn không được có dấu gạch nối. Một regex đóng gói khẳng định này sẽ là đúng, tôi nghĩ vậy.