Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
@chusov 15.08.2021 23:41 / 15.08.2021 23:49
Если что нуб в Парсере, поэтому прошу носом в книгу.Не усложняя, возьмем строку, например $str[Masha-da-ne-nasha] и простой разделитель $delimeter[-] в реализации Misha.v.3 регулярка имеет вид: ^str.match[(.+?)(?:$sRegex|^$)][g] что дает ясное понимание: нежадной квантификацией для первой группы скобок найти все подстроки перед разделителем (описаным во второй группе скобок) или перед концом всей строки, что логично, т.к. в описание (подстрока)(разделитель) попадут только: (Masha)(-) (da)(-) (ne)(-) а "nasha" попадет под (nasha)(^$) Но у E.Spearance мне бросился в глаза "хак" без "или", вида: $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}} Т.е. он так же ищет все паттерны (подстрока)(разделитель) в которую войдут только первые три слова "Masha, da, ne" А остаток после разделителя и до конца строки он получает из result'aИ именно в этом суть вопроса: а как это так?
Если указана опция поиска g, будет создана таблица (объект класса table) найденного по шаблону (по одной строке на каждое вхождение). Если опция g не была указана, то таблица будет содержать лишь одну строку с первым вхождением. Если не было найдено ни одного совпадения, то результатом операции будет пустая таблица. Если указана опция n то вместо таблицы с результатами будет возвращаться число - количество найденных совпадений.Только тип table или тип int/double (при опции n) - точка!