2014-09-01 17 views
5

Tôi đang sử dụng VS2010 và mã hóa C++ console ứng dụng và phải đối mặt với vấn đềcó gì sai với regex_match? rất biểu hiện đơn giản

#include <regex> 
using namespace std; 

//... 

if (!regex_match("abab",regex("(ab?)*"))) 
{ 
    //the problem is - why we are here? why it doesn't match? 
} 

kiểm tra ở đây http://regexpal.com/ - nó phù hợp với

+5

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. –

+0

@CaptainObvlious bạn đúng !! Tôi thử nghiệm nó trong VS2012, đó là cách regex phù hợp với tôi. –

+0

[Làm việc với gcc] (http://coliru.stacked-crooked.com/a/65f607082de2cc06). –

Trả lời

0

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.

Các vấn đề liên quan