| English | Regex Split | |
|
||
Данный метод поможет обойти краеугольный камень ^текст.split[] и решить проблему вёрстки в сложных строках текста. Он похож на обычный split опциями разбиения, и на выходе так же возвращает объект класса table содержащий:
В качестве параметра regex нужно указывать регулярное выражение или текст описывающие только разделитель. Параметр delimiter не обязательный, может принимать следующие значения:
Сам метод:
########################################
# Разбивает строку по регулярным выражениям
#
# l - разбить слева направо (по-умолчанию);
# r - разбить справа налево;
# h - сформировать безымянную таблицу где части исходной строки помещаются горизонтально;
# v - сформировать таблицу со столбцом piece, где части исходной строки помещаются вертикально (по-умолчанию).
#####
@rsplit[text;regex;delimiter][table_split]
^if(def $text && def $regex){
$table_split[^table::create{piece}]
$result[^text.match[(.*?)(?:$regex)][g]{^if(def $match.1){^table_split.append{$match.1}}}]
^if(def $result){^table_split.append{$result}}
^if(!def $delimiter){$delimiter[lv]}
^switch[^delimiter.lower[]]{
^case[r;rv;vr]{$result[^table::create[$table_split;$.reverse(1)]]}
^case[rh;hr]{$result[^table::create[$table_split;$.reverse(1)]]$result[^result.flip[]]}
^case[h;lh;hl]{$result[^table_split.flip[]]}
^case[DEFAULT]{$result[$table_split]}
}
}{
^throw[parser.runtime;rsplit;parameters ^$text and ^$regex must be defined]
}
### End @rsplit[]
Примеры:
$text[12:01. 14:05, 18:00,21:20 Спортивные новости] Исходный текст: $textИсходный текст: 12:01. 14:05, 18:00,21:20 Спортивные новости
$parts[^rsplit[$text;[,\.]\s?]] Результат: ^parts.menu{$parts.piece}[ ]
$text[2004-12-22 13:30] Исходный текст: $textИсходный текст: 2004-12-22 13:30
$parts[^rsplit[$text;[^^0-9];r]] Результат: ^parts.menu{$parts.piece}[ ]
$text[2004/12//22] Исходный текст: $textИсходный текст: 2004/12//22
$parts[^rsplit[$text;/{1,2};rh]] Результат: ${parts.0}.${parts.1}.$parts.2
| Powered by Parser 3 | Eugene Spearance |