从包含特殊字符的字符串中获取所有子字符串的有效方法

时间:2014-03-01 12:34:51

标签: c++ string boost

我有一个这样的字符串:

    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
   }
}

它有效,但有没有有效的解决方案呢?

1 个答案:

答案 0 :(得分:1)

您可以使用regular expression "#([^#*]*[*][^#]*)#"来提取所有此类字符串。

表达式描述了您正在寻找的子串的类型:

  • #
  • 开始
  • 除星号外还有零个或多个字符,......
  • 后面跟着至少一个星号
  • 后面跟着#
  • 以外的零个或多个字符
  • ,最后是#