2011-10-08 18 views
6

Tôi đọc qua n1429 với phầnCó match_partial trong C++ 11 Regular Expressions không?

Các thuật toán regex_match và regex_search cả hỗ trợ một tính năng không thường thấy trong thư viện biểu thức chính quy: một trận đấu phần. Khi cờ std::regex_constants::match_partial được đặt trong các cờ được chuyển đến thuật toán, thì kết quả của true có thể được trả lại nếu một hoặc nhiều ký tự được khớp và máy trạng thái sau đó đã kết thúc chuỗi ký tự trong khi vẫn còn trạng thái được kêt hợp. [...]

Nhưng tôi không thể tìm thấy bất kỳ dấu vết nào của tính năng đó trong FCD, cũng như trong tiêu đề của gcc-4.7.0 hiện tại. Tôi cũng tìm một bản sửa đổi n1429 nhưng lại không tìm thấy gì cả. Tôi biết rằng cơ sở cho đề xuất có nguồn gốc từ Boost và được đưa vào TR1. Nhưng tôi không biết khi nào match_partial biến mất.

Tính năng đối sánh một phần có phải là vẫn còn trong C++ 11 không? Có thể với một cái tên khác?

Trả lời

8

Dường như cờ match_partial được lấy ra trong N1723 "Proposed Resolutions to Library TR Issues" (2004 Tháng Mười) như là một giải pháp cho N1507 "Errata to the Regular Expression Proposal":

7,34 Ý nghĩa của lá cờ match_partial

Remove match_partial.

Lý do theo N1837 "Library Extension Technical Report  Issues List" là:

Các LWG đồng ý rằng đây là một tính năng hữu ích và thực hiện được, nhưng chúng tôi đã nhiều lần cố gắng và thất bại trong việc cung cấp cho nó một đặc điểm kỹ thuật đầy đủ. Chúng tôi hy vọng rằng sẽ có thể thêm tính năng này trong một phiên bản trong tương lai.

Tôi đoán không có sự thay thế nào trong C++ 11. Bạn vẫn có thể sử dụng Boost.Regex mặc dù (nơi std::regex xuất phát từ), hỗ trợ partial match.

+0

Cảm ơn. Tôi đã tìm kiếm một thay thế toàn bộ N1429, chứ không phải sửa đổi đậm. – towi

+1

Tôi đã đánh đầu mình cố gắng tìm ra lý do tại sao tôi không thể phù hợp với bất cứ điều gì! Tôi nghĩ đây sẽ là hành vi mặc định trong bất kỳ triển khai nào. Cám ơn vì cái này. – Kenneth