Подтвердить что ты не робот

Boost:: Split с использованием цельной строки в качестве разделителя

Я хотел бы знать, если есть метод, использующий boost :: split для разделения строки, используя целые строки в качестве разделителя. Например:

str = "xxaxxxxabcxxxxbxxxcxxx"

Есть ли способ разделить эту строку, используя "abc" качестве разделителя? Поэтому возвращаюсь:

Результатами будут строки "xxaxxxx" и "xxxxbxxxcxxx".

Мне известно о boost::split с использованием предиката "is_any_of", однако is_any_of("abc") приведет к разбиению строки на отдельные символы "a", "b" и "c", что не то, что я хочу.

4b9b3361

Ответ 1

split_regex, как это предложил @Mythli, прекрасно. Если вы не хотите иметь дело с регулярным выражением, вы можете использовать ifind_all algo, как показано в этом . Вы получаете iterator_range (начало/конец) всех вхождений вашего разделителя. Ваши жетоны находятся между ними (и в начале и в конце строки).

Ответ 2

Да, есть способ (это я знаю, может быть, есть лучший способ) Используйте boost::algorithm::split_regex для разделения последовательностей символов, где разделители являются регулярными выражениями.

Пример:

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