std :: string到std :: regex

时间:2018-03-12 15:50:59

标签: c++ regex

我正在尝试将字符串转换为正则表达式,字符串看起来像这样:

std::string term = "apples oranges";

我希望regexterm,所有空格都替换为任何字符和任意长度的字符,我认为这可能有用:

boost::replace_all(term , " " , "[.*]");
std::regex rgx(s_term);

所以std::regex_search term在查看时会返回true:

std::string term = "apples pears oranges";

但它没有成功,你怎么做到这一点?

2 个答案:

答案 0 :(得分:2)

您应该使用没有boost::replace_all(term , " " , ".*");的{​​{1}}。 []只表示任何字符及其中任意数字。

答案 1 :(得分:2)

您可以使用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;
}

https://ideone.com/gyzfCj

当找到apples<something>oranges的第一次出现时,将返回此值。如果您需要匹配整个字符串,请使用std::regex_match