Boost::Split using whole string as delimiter

andre picture andre · Sep 15, 2011 · Viewed 8.8k times · Source

I would like to know if there is a method using boost::split to split a string using whole strings as a delimiter. For example:

str = "xxaxxxxabcxxxxbxxxcxxx"

is there a method to split this string using "abc" as a a delimiter? Therefore returning:

Results would be the string "xxaxxxx" and "xxxxbxxxcxxx".

I am aware of boost::split using the "is_any_of" predicate, however invoking is_any_of("abc") would result in splitting the string at the single character 'a', 'b', and 'c' as well, which is not what I want.

Answer

Mythli picture Mythli · Sep 15, 2011

Yes there is a way (this is a way I know, maybe there is a better way) Use boost::algorithm::split_regex to split character sequences where delimiters are regular expressions.

Example:

vector< string > result;
boost::algorithm::split_regex( result, str, regex( "^((?!abc)*abc(?!abc)*)*$" ) ) ;
copy( result.begin(), result.end(), ostream_iterator<string>( cout, "\n" ) ) ;