2013-12-01 3 views
0

У меня есть такое регулярное выражениеподталкивания регулярное выражение матч

boost::regex isAgent 
    ("Mozilla/\d[.]\d \(Windows NT \d[.]\d; (Win64; x64;|WOW64;)?(.*?)\) Gecko/\d{8} Firefox/\d\d[.]\d", 
    boost::regex::perl); 
if (boost::regex_search(auxAgent.c_str(), match, reg)){...}... 

я знаю, что в auxAgent я есть exacly Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0

на этой странице http://gskinner.com/RegExr/?37em3 все совпадает, но не толчок, что я делаю не так?

ответ

1

В C++ символ \ должен быть экранирован. Поэтому, если вы хотите избежать чего-либо, вам нужно сделать \\. Это должно решить проблему. Всякий раз, когда вы используете обратную косую черту в строке, вам нужно ее избежать. Если вам понадобится найти его в строке с регулярным выражением, вам нужно будет найти его с помощью \\\\.

+0

еще не работает, даже я избежал символов – whd

+0

Pawel правильно. Для пояснения это означает, что ваша переменная 'isAgent' должна быть определена следующим образом:' boost :: regex isAgent («Mozilla/\\ d \\. \\ d \\ (Windows NT \\ d \\. \\ d ; (Win64; x64; | WOW64;)? (. *?) \\) Gecko/\\ d {8} Firefox/\\ d \\ d \\. \\ d ", boost :: regex :: perl); ' –

+0

он не работает с вашей версией qwrrty – whd

1

Я думаю, что Pawel Stawarz правильный. Вы должны избегать обратной косой черты. Но вот все символы, которые вам нужно убежать:

^. $ |() [] * +? \/

Заменить \ с \\

и

Заменить? с \?

т.д.

Источник: How to escape a string for use in Boost Regex

Смежные вопросы