Rất đơn giản: regex_match chỉ trả về true nếu toàn bộ chuỗi được đối sánh. Bạn có thể muốn sử dụng regex_search nếu bạn muốn xem liệu một chuỗi có chứa regex của bạn hay không.
"ab?" khớp với "aba", bộ lặp ("() *") làm cho trận đấu này một lần. Phần còn lại là "b", do đó, nó không phải là một trận đấu đầy đủ.
Tôi xin lỗi, tôi đã hiểu sai về regex. Nó phải là một trận đấu đầy đủ. Lạ đủ:
regex_match("aab", regex("(ab?)*")) == true
Dường như là lỗi trong stl được sử dụng (thử nghiệm với QT Creator 2010.05, makepec = VS2010). Thay thế regex_match bằng regex_search trong mã của bạn khớp với đúng, nhưng match_results trống - cho biết có điều gì đó không ổn.
Với VS2012 tất cả các thử nghiệm được so khớp chính xác.
Nhiều triển khai của thư viện biểu thức chính quy là sơ sài, đặc biệt là trong VS 2010. Hãy nhớ rằng VS 2010 là ** không ** trình biên dịch C++ 11, nó chỉ hỗ trợ các tính năng _some_ C++ 11. –
@CaptainObvlious bạn đúng !! Tôi thử nghiệm nó trong VS2012, đó là cách regex phù hợp với tôi. –
[Làm việc với gcc] (http://coliru.stacked-crooked.com/a/65f607082de2cc06). –