2012-04-11 1 views
3

Я использую boost :: xpressive для разбора через текстовый файл. Я хочу видеть, только если строка начинается с «#» (один раз).boost :: xpressive, чтобы увидеть начало последовательности

Я использую следующий код

std::string str1 = "## this could be my line"; 
sregex rex1 = sregex::compile("^#+"); 
smatch result1; 
if(regex_match(str1,result1,rex1){ 
    std::cout << result1[0] << '\n'; 
}else{ 
std::cout << "match not found!\n"; 
} 

Но я всегда получаю «матч не найден!», Даже тогда, когда строки начинаются с #. Может ли кто-нибудь помочь мне здесь?

Возможно, кто-нибудь может помочь мне в написании заявления rex1 с помощью boost :: xpressive 'bos'?

Спасибо! Ayesha

ответ

3

Использовать regex_search вместо regex_match.

А вот статический Xpressive синтаксис rex1:

bos >> +as_xpr('#'); 
+0

Wow! Спасибо большое !, он сработал !! Можете ли вы объяснить, почему regex_match не будет соответствовать? Я думал, что '##' должен соответствовать '^ # +'. –

+0

@Ayesha: '' ## "' действительно соответствует ''^# + "', но '' ## это может быть моя строка "(как в коде вашего вопроса) не будет. Цитируя [docs] (http://www.boost.org/doc/html/xpressive/user_s_guide.html#boost_xpressive.user_s_guide.quick_start), «Для успешного выполнения функции regex_match() вся строка должна соответствовать регулярному выражению, от начала до конца. * "Таким образом, ваше регулярное выражение должно быть' '^ # +. *" 'для того, чтобы' regex_match' работал со своим вопросом. Подсказка: прочитайте документы. ; -] – ildjarn

+0

Получил это! Большое спасибо. Пришлось перечитать документы более тщательно! –

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

  • Нет связанных вопросов^_^