我有一个这样的字符串:
std::string input = "This* #is # #just# a *random ##string #*that#
may contain any# char*cters#";
我需要获得所有子串:
1)在字符'#'
之间AND
2)包含字符'*'
结果将是:
" a *random "
"*that"
" char*cters"
我这样做:
std::vector<std::string> substrings;
boost::split(substrings, input, boost::is_any_of("#"));
for (int i = 0; i < substrings.size(); i++)
{
if (i != 0 // first and last substring is not between '#' (only from one side)
&& (i != substrings.size() - 1)
&& !substrings[i].empty()
&& substrings[i].find('*') != std::string::npos) // if contain '*' character
{
// Here I've got my result
}
}
它有效,但有没有有效的解决方案呢?
答案 0 :(得分:1)
您可以使用regular expression "#([^#*]*[*][^#]*)#"
来提取所有此类字符串。
表达式描述了您正在寻找的子串的类型:
#
#
#
。