2013-06-02 37 views
6

Tôi đang chuyển đổi các biểu thức chính quy dựa trên boost của tôi thành regex C++ 11. Tôi có một nhóm chụp gọi url:C++ 11 Regex Capture Groups theo tên

\s*?=\s*?(("(?<url>.*?)")|('?<url>.*?)')) 

Với tăng, nếu bạn đã có một smatch bạn có thể gọi match.str("url") để có được những nhóm chụp theo tên. Với std::smatch, tôi chỉ thấy các kết quả phù hợp được lập chỉ mục.

Tôi làm cách nào để có quyền truy cập vào việc chụp url bằng cách sử dụng lớp std :: smatch?

+0

Bạn đã thử '(? P . *?)' Thay vì '(? . *?)'? – HamZa

+0

@HamZa Tôi không chắc liệu C++ 11 regex có hỗ trợ các nhóm chụp được đặt tên hay không. Tôi chỉ đọc toàn bộ chương dành riêng cho chủ đề trong "Ngôn ngữ lập trình C++" của Stroustrup và thậm chí nó không đề cập đến nó. Và nhiều tài liệu tham khảo trực tuyến dường như không chỉ ra khác. –

+0

Dường như nó không hỗ trợ các nhóm được đặt tên theo [answer] này (http://stackoverflow.com/a/6398650). – HamZa

Trả lời

5

Bạn không thể đặt tên nhóm chụp bằng tiêu chuẩn C++ 11. C++ 11 regex phù hợp với cú pháp ECMAScript. Đây là một liên kết giải thích tất cả http://www.cplusplus.com/reference/regex/ECMAScript/. Mặc dù điều này có thể gây thất vọng nếu bạn nghĩ về nó một biểu thức chính quy thực sự sẽ không hỗ trợ điều này nó là thêm.

+0

Bạn có thể đăng một ví dụ trích xuất một nhóm lồng nhau không? Có lẽ nơi trận đấu có thể ở hai bên của một đường ống? –

+0

Bạn có nghĩa là afer các trận đấu đã được thực hiện – aaronman

+0

Tôi về cơ bản muốn xem làm thế nào để có hiệu quả trích xuất url của tôi dựa trên ví dụ đăng của tôi, cập nhật để không dựa vào các nhóm chụp được đặt tên. –