Я пытаюсь использовать boost regex в одном из моих проектов. На самом деле я переношу одно из своих программ на C++ и очень сильно зависит от регулярных выражений.Boost :: regex Странное поведение
Я вижу, что это противоречит моему предыдущему опыту с другими библиотеками Regex. Я надеюсь, что кто-то может помочь мне понять или сообщить мне, есть ли дополнительные флаги, которые я могу использовать для повышения моего требования.
Вот тема строка:
This is an example to test regex `54 6767 98` thats it
Когда я использую это регулярное выражение: \\\d*
, я ожидаю, чтобы получить 54 в качестве результата (что происходит, когда я использую .Net регулярное выражение или TperlRegex в Дельфах) Но когда я использование boost, функция возвращает TRUE, но cmatch пуст!
Нормально ли это? Я знаю, что могу использовать \d+
. но это не так, как мне нужно, чтобы работать, потому что это будет причиной многих других проблем в более сложных регулярных выражениях, которые я использую в своем программном обеспечении.
Вот код, кстати:
cmatch what;
boost::regex re("\\d*", regex::perl | regex::icase);
std::string ssub = "something 54 67 979 some text";
if (boost::regex_search(ssub.c_str(), what , re)
return what[0];
Я думаю, что он должен вернуть 54 в этом случае, но это не так. Он работает в/Net Regex и TperlRegex, как я и ожидал.
С уважением
'*' соответствует 0 или более. Вы хотите '?' для соответствия 1 или более. – stark
@stark: НЕПРАВИЛЬНО. '?' соответствует 0 или 1. '+' соответствует 1 или более. Но здесь это не имеет никакого значения, так как двигатель должен быть жадным и есть самую длинную строку, которая может быть сопоставлена '\ d *'. – nhahtdh
Извините, это значит +. ANyway, \ d * совпадает в начале строки. – stark