Я пытаюсь преобразовать строку в регулярное выражение, строка выглядит так:
std::string term = "apples oranges";
и я хотел, чтобы regex был term со всеми пробелами, замененными любым символом и любой длиной символов, и я подумал, что это может сработать:
boost::replace_all(term , " " , "[.*]");
std::regex rgx(s_term);
поэтому в std::regex_searchterm вернет истину при просмотре:
std::string term = "apples pears oranges";
но не получается, как это сделать правильно?





Вы должны использовать boost::replace_all(term , " " , ".*"); без []. .* просто означает любой символ и любое их количество.
Чтобы уточнить, [.*] означает «Соответствует только одному из буквальных символов . или *».
". *" тоже не работает
Вы можете делать все с basic_regex, boost не нужен:
#include <iostream>
#include <string>
#include <regex>
int main()
{
std::string search_term = "apples oranges";
search_term = std::regex_replace(search_term, std::regex("\\s+"), ".*");
std::string term = "apples pears oranges";
std::smatch matches;
if (std::regex_search(term, matches, std::regex(search_term)))
std::cout << "Match: " << matches[0] << std::endl;
else
std::cout << "No match!" << std::endl;
return 0;
}
Это вернется, когда будет найдено первое вхождение apples<something>oranges. Если вам нужно сопоставить всю строку, используйте std::regex_match
Вы должны проверить это тестером. Ваше регулярное выражение не сработает: regex101.com/r/tGICBc/1