parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Метод разбиения строки по регулярному выражению (улучшеный split)

Spearance 22.12.2004 17:36

Сам метод:
########################################
#
# Разбивает строку по регулярным выражениям
#
# l - разбить слева направо (по-умолчанию);
# r - разбить справа налево;
# h - сформировать безымянную таблицу где части исходной строки помещаются горизонтально;
# v - сформировать таблицу со столбцом piece, где части исходной строки помещаются вертикально (по-умолчанию).
#
#####
@rsplit[text;regex;divider][table_split;copy]
^if(def $text){
	$table_split[^table::create{piece}]
	$result[^text.match[(.+?)$regex][g]{^table_split.append{$match.1}}]
	^table_split.append{$result}
	^if(!def $divider){$divider[lv]}
	^switch[^divider.lower[]]{
		^case[r;rv]{$result[^table::create[$table_split;$.reverse(1)]]}
		^case[rh]{$copy[^table::create[$table_split;$.reverse(1)]]$result[^copy.flip[]]}
		^case[h;lh]{$result[^table_split.flip[]]}
		^case[DEFAULT]{$result[$table_split]}
	}
}
### End @rsplit[]
Примеры использования и описание здесь.

P.S. Если Misha v.3 сочтёт нужным, появится в примерах.