Tôi đang cố gắng phân tích chuỗi đầu vào bằng cách sử dụng cụm từ thông dụng. Tôi đang gặp vấn đề khi cố gắng nắm bắt một nhóm lặp lại. Tôi luôn luôn có vẻ là phù hợp với trường hợp cuối cùng của nhóm. Tôi đã cố gắng sử dụng định lượng Reluctant (không tham lam), nhưng tôi dường như thiếu một cái gì đó. Ai đó có thể giúp đỡ?Làm cách nào để nắm bắt tất cả các kết quả trùng khớp của nhóm lặp lại với Boost :: regex_search?
biểu hiện thường xuyên cố gắng:
(OS)\\s((\\w{3})(([A-Za-z0-9]{2})|(\\w{3})(\\w{3}))\\/{0,1}){1,5}?\\r
(OS)\\s((\\w{3}?)(([A-Za-z0-9]{2}?)|(\\w{3}?)(\\w{3}?))\\/{0,1}?){1,5}?\\r
Chuỗi Input:
OS BENKL/LHRBA/MANQFL\r\n
tôi luôn luôn dường như để có được nhóm cuối cùng đó là MANQFL nhóm (MAN QFL)
, và mục tiêu của tôi là để có được tất cả ba nhóm (có thể là 1-5 nhóm):
(BEN KL) , (LHR BA) and (MAN QFL).
Đoạn mã C++:
std::string::const_iterator start = str.begin(), end = str.end();
while(regex_search(start,end,what,expr))
{
cout << what[0];
cout << what[1];
...
start += what.position() + what.length();
}
Vòng lặp này chỉ xuất hiện một lần, trong khi tôi mong đợi nó chạy 3 lần trong ví dụ này. Bất kỳ trợ giúp sẽ được nhiều đánh giá cao.
Nó sẽ giúp ích rất nhiều nếu bạn cho chúng tôi biết thêm về định dạng của đầu vào và cách bạn muốn phân tích cú pháp. –
Đầu vào là luồng chuỗi và trong ví dụ này, tôi mong đợi nhận được 3 nhóm (BEN KL), (LHR BA) và (MAN QFL). Tôi biết trong trường hợp này chúng ta có thể làm điều đó ngay cả khi không sử dụng các biểu thức thông thường, nhưng tôi chỉ cố gắng xem liệu tôi có thể giữ nó phù hợp với mã hiện tại mà regex được sử dụng hay không. – omshanti