| Новости | 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) - точка!