Здесь показаны различия между двумя версиями данной страницы.
Both sides previous revision Предыдущая версия Следущая версия | Предыдущая версия | ||
help:strings [2013/10/19 09:19] newsash [Строки] |
help:strings [2024/12/01 10:12] (текущий) aleks_versus |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
[[help:arrays|Назад: Массивы]] | [[help:arrays|Назад: Массивы]] | ||
- | =====Строки===== | + | ====== Строки ====== |
- | В QSP есть два типа данных: числовой ((целочисленный)) и строковый.\\ | + | В **QSP** есть три типа данных: числовой, строковый и кортежи. В данном разделе мы рассмотрим строковый тип данных и способы работы с ним. |
- | Строковый тип данных отличается тем, что в начале названия строковой переменной или массива должен быть символ '**$**'.\\ | + | |
- | Рекомендуется к названиям всех функций, возвращающих строковые значения, тоже приписывать символ '**$**' для улучшения читаемости кода. | + | |
- | ====Константы==== | + | |
- | Если с числовыми константами в QSP всё просто (просто записывается числом, например, 4593), то со строковыми есть несколько нюансов: | + | Если мы присваиваем строковое значение переменной, перед именем такой переменной обязательно нужно ставить символ ''%%$%%''. То же самое, если мы //извлекаем// строковое значение из переменной. |
- | $res = ('x=' & x & ' y=' & y) &! Результат 'x=5 y=6' | + | <sxh qsp> |
- | $res = 'x=' & x &! Результат 'x=', а '5' выведется в основное окно описания. | + | $text = "Зелёное яблоко" &! помещаем строковое значение в переменную |
+ | *pl $text &! выводим на экран значение строковой переменной | ||
+ | </sxh> | ||
- | 10) Для подвыражений, если нужно вывести последовательность "<<" на экран, используйте системную переменную "DISABLESUBEX". К примеру: | + | Также рекомендуется к названиям всех функций, возвращающих строковые значения, приписывать символ ''%%$%%'' для улучшения читаемости кода. |
<sxh qsp> | <sxh qsp> | ||
- | DISABLESUBEX=1 | + | $max('Петя','Вася','Лёша','Дима') |
- | $text = '<<var>>' | + | $text = $str(453+111) |
- | 'string <<var>>' | + | $name = $input('Введите имя:') |
- | DISABLESUBEX=0 | + | |
</sxh> | </sxh> | ||
+ | ===== Константы ===== | ||
- | Числовая константа записывается числом (например, 4535), а текстовая берётся с двух сторон в кавычки. Кавычками могут быть либо апострофы ('), либо прямые кавычки ("). Две подряд идущие кавычки считаются кавычкой, включённой в текстовую константу. Т.е. после выполнения строк | + | Под константой следует понимать одно конкретное значение. Например, число ''%%1441%%'' — это числовая константа, а строка ''%%"Зелёные яблоки"%%'' — это строковая константа. |
- | *PL 'Byte Soft''s QSP' | + | Если с числовыми константами в **QSP** всё просто (записываем число, используя набор цифр; например, ''%%4953%%''), то со строковыми есть несколько нюансов: |
- | *PL "Byte Soft's ""QSP""" | + | |
- | вы увидите строки | + | |
- | Byte Soft's QSP | + | |
- | Byte Soft's "QSP" | + | |
- | Существует возможность использования преформатированных текстовых констант. Для таких констант сохраняются переносы строк и отступы. Примеры: | + | * Строковая константа берётся с двух сторон в кавычки (обрамляется кавычками). |
+ | * Кавычки могут быть двух видов: апострофы ''%%' '%%'' и прямые кавычки ''%%" "%%''. | ||
+ | * Если нужно в константу включить кавычки того же вида, нужно написать их два раза подряд (//экранировать через дублирование//): <sxh qsp> | ||
+ | *PL 'Byte Soft''s "QSP"' | ||
+ | *PL "Byte Soft's ""QSP""" | ||
+ | !Byte Soft's "QSP" | ||
+ | </sxh> | ||
+ | * В строковых константах сохраняются переносы строк и отступы:<sxh qsp> | ||
'Данный текст | 'Данный текст | ||
будет расположен на | будет расположен на | ||
Строка 37: | Строка 39: | ||
$a='И этот | $a='И этот | ||
- | текст | + | текст |
также' | также' | ||
a=2 & act 'Многострочное | a=2 & act 'Многострочное | ||
- | название':gt 'next' | + | название': gt 'next' |
+ | </sxh> | ||
+ | * Если ошибка допущена внутри строковой константы, то вся многострочная константа будет считаться одной строкой при выводе ошибки.<sxh qsp> | ||
+ | ! ошибка указывается во второй строке | ||
+ | *pl "Хотя на самом | ||
+ | деле ошибка | ||
+ | в четвёртой <<"строке">>"</sxh> | ||
+ | * Текстовые константы и значения переменных можно объединять двумя способами: | ||
+ | * С помощью оператора конкатенации ''**&**''. Выражение нужно брать в скобки, т.к. существует ещё разделитель команд ''**&**'':<sxh qsp> | ||
+ | ! В переменную $res запишется 'x=5 y=6': | ||
+ | $res = ('x=' & x & ' y=' & y) | ||
+ | ! В переменную $res запишется 'x=', | ||
+ | ! а '5' выведется в основное окно описания: | ||
+ | $res = 'x=' & x | ||
+ | </sxh> | ||
+ | * С помощью оператора сложения ''**+**'': <sxh qsp> | ||
+ | ! Результат 'x=5 y=6': | ||
+ | $res = 'x=' + x + ' y=' + y | ||
+ | </sxh> | ||
+ | * Следует соблюдать осторожность, если одно из слагаемых числового типа: <sxh qsp> | ||
+ | x = 1 | ||
+ | $res = '1' + x | ||
+ | !Результат '2' вместо '11' | ||
+ | </sxh> | ||
- | PS: | + | ==== Экранирование ==== |
- | Строки, содержащие преформатированную текстовую константу, считаются ОДНОЙ строкой (сообщения об ошибках также выводятся с учётом того, что это одна строка). | + | |
- | В зависимости от результата вычисления выражения могут быть либо строковыми, либо числовыми. | + | Чуть выше были приведены два случая экранирования кавычек в строке. Экранирование становится особенно важным, когда мы имеем дело с более сложным вложением кавычек. Например, при работе с HTML-разметкой. |
- | Примеры числовых выражений: | + | Для более полного понимания того, как можно экранировать кавычки в **QSP**, рассмотрим гиперссылку, в которую встроен переход на локацию. Вот как эта ссылка будет выглядеть на экране при отключенном режиме распознавания HTML: |
- | 3+4*3*4 | + | |
- | (val('25')*4)/(2*5) | + | |
- | был_в_комнате = 0 | + | |
- | $был_в_комнате = 'нет' | + | |
- | 1 AND 1 OR 0 | + | |
- | A=B AND (C<>D OR 2=E+3) | + | |
- | $str1 = $str2 AND $str2 <> $str3 | + | |
- | Примеры строковых выражений: | + | <sxh html> |
- | 'строка' | + | <a href="EXEC: goto 'Верстак' " class="plain">Верстак</a> |
- | "проверка" | + | </sxh> |
- | "преформатированная | + | |
- | текстовая | + | |
- | константа" | + | |
- | mid("строка",1,2) | + | Если мы заключим нашу ссылку в одинарные кавычки, нам придётся экранировать одинарные кавычки внутри атрибута **href**: |
- | $VAR | + | |
- | $VAR + ' строка ' | + | |
- | Складывать с помощью "+" можно не только числа (значения числовых выражений), но и объединять текстовые константы (значения строковых выражений). Также для объединения строковых значений можно использовать символ "&", при этом такое объединение должно быть заключено в скобки. Например, | + | <sxh qsp> |
+ | *p '<a href="EXEC: goto ''Верстак'' " class="plain">Верстак</a>' | ||
+ | </sxh> | ||
- | *PL 'The '+'door '+'is closed.' | + | Если мы заключим нашу ссылку в двойные кавычки, то нам придётся экранировать непосредственно границы атрибутов от кода **QSP**: |
- | и | + | |
- | *PL ('The '&'door '&'is closed.') | + | |
- | выведут одно и то же: "The door is closed.". | + | |
- | Возможна ЛЮБАЯ комбинация констант, переменных, функций. | + | <sxh qsp> |
- | При вычислении значений выражений движок (по возможности) конвертирует типы данных автоматически. | + | *p "<a href=""EXEC: goto 'Верстак' "" class=""plain"">Верстак</a>" |
- | В строковые константы, в базовые описания локаций и названия базовых действий существует возможность вставлять значения выражений. | + | </sxh> |
- | Такие "подвыражения" должны находиться между двойных угловых скобок: "<<" и ">>", до и после которых может идти любой текст, включая подобные "подвыражения". | + | |
- | Например, вместо оператора | + | |
- | pl 'i='+str(i) | + | |
- | можно написать | + | |
- | pl 'i=<<i>>' | + | |
- | Ещё примеры: | + | |
- | число_гоблинов=5 | + | |
- | 'Тебя окружили <<число_гоблинов>> гоблинов!' | + | |
- | pl 'Вас зовут <<$PlayerName>>, вы находитесь в <<$curloc>>.' | + | |
- | Примеры использования вложенных "подвыражений": | + | |
- | pl val('<<val("<<i>>")>><<j>>') | + | |
- | pl val('<<str(val("<<i>>"))>>') | + | |
- | Так как "подвыражения" вычисляются внутри строковых констант, то для вычисления вложенного "подвыражения" необходимо присутствие вложенной строковой константы. | + | |
- | PS: | + | |
- | Смотрите раздел "Использование массивов" этой части документации, чтобы получить дополнительную информацию о возможных выражениях. | + | |
- | ====Операторы и функции==== | + | Есть способ записи, когда нам не приходится экранировать кавычки вообще. Мы просто заключаем ссылку в фигурные скобки (не рекомендуется): |
- | DISABLESUBEX - если значение переменной не равно 0, то запрещает использование "подвыражений" в тексте (например, значением '<<5+6>>' будет строка '<<5+6>>', а не '11'). | + | <sxh qsp> |
+ | *p {<a href="EXEC: goto 'Верстак' " class="plain">Верстак</a>} | ||
+ | </sxh> | ||
- | LEN([$выражение]) - возвращает длину строки [$выражение]. | + | Может так же пригодиться способ, позволяющий создавать глубокие уровни вложенности кавычек друг в друга и обходиться без экранирования: |
+ | <sxh qsp> | ||
+ | *p '<a href="EXEC:' + " goto 'Верстак' " + ' " class="plain">Верстак</a>' | ||
+ | </sxh> | ||
+ | ===== Сравнение строк ===== | ||
- | MID([$выражение],[#выражение 1],[#выражение 2]) - вырезает из строки [$выражение] строку, которая начинается с символа номер [#выражение 1] и имеет длину [#выражение 2]. Индексация символов в строке ведётся с 1. | + | Точно так же, как и числовые значения, мы можем сравнивать строковые значения. При этом операции сравнения будут возвращать **1**, если равенство верно, и **0**, если равенство неверно. |
- | Параметр [#выражение 2] может отсутствовать, при этом вырезается вся строка, начиная с символа [#выражение 1]. Примеры: | + | <sxh qsp> |
+ | if 'abc'='abc': 'Условие выполнено' | ||
+ | *pl ('abc'='abc') & ! увидим на экране единицу | ||
+ | *pl ('abc'>'ab') & ! увидим на экране единицу | ||
+ | *pl ('abc'<'abc') & ! увидим на экране ноль | ||
+ | </sxh> | ||
+ | Строки сравниваются посимвольно, начиная с крайнего левого символа. | ||
+ | <sxh qsp> | ||
+ | ! это не валидный код qsp | ||
+ | ! а табличка сравнения строковых констант | ||
+ | 'ac' = 'ac' | ||
+ | 'bc' > 'ac' &! 'b' > 'a' | ||
+ | 'ac' > 'ab' &! 'c' > 'b' | ||
+ | 'b' > 'ab' &! 'b' > 'a' | ||
+ | 'ab' > 'a' &! 'b' > '' | ||
+ | </sxh> | ||
- | MID('abcd', 1, 2) равно 'ab' | + | ===== Подвыражения ===== |
- | MID('abcd', 2, 3) равно 'bcd' | + | **QSP** позволяет вставлять значения различных выражений в строковые константы, а так же в базовые описания локаций и названия базовых действий. Для этого используются специальные конструкции из двойных угловых скобок: ''%%<<%%'' и ''%%>>%%''. Выражения, помещённые в такие двойные угловые скобки, называются **подвыражениями**, или **вложенными выражениями**. |
- | MID('abcd', 2) равно 'bcd' | + | Примеры: |
+ | <sxh qsp> | ||
+ | число_гоблинов=5 | ||
+ | 'Тебя окружили <<число_гоблинов>> гоблинов!' | ||
+ | ! на экране будет строка: | ||
+ | ! Тебя окружили 5 гоблинов! | ||
+ | </sxh> | ||
+ | <sxh qsp> | ||
+ | pl 'Вас зовут <<$playerName>>, вы находитесь в <<$curloc>>.' | ||
+ | </sxh> | ||
- | UCASE([$выражение]) - возвращает строку больших букв, полученную изменением регистра букв исходной строки [$выражение]. Пример: | + | Когда плеер встречает подобное подвыражение, он это подвыражение **раскрывает**. Это значит, что плеер вычисляет значение выражения в двойных угловых скобках, а затем подставляет полученное значение на место этого самого подвыражения. |
+ | Другие примеры: | ||
+ | <sxh qsp> | ||
+ | pl 'i='+$str(i) | ||
+ | !эквивалентно | ||
+ | pl 'i=<<i>>' | ||
+ | </sxh> | ||
- | UCASE('TexT#') равно 'TEXT#' | + | Подвыражения можно вкладывать друг в друга. Здесь очень важно соблюдать чередование кавычек, если вы это делаете: |
+ | <sxh qsp> | ||
+ | !Вложенные подвыражения: | ||
+ | pl val('<<val("<<i>>")>><<j>>') | ||
+ | pl val('<<$str(val("<<i>>"))>>') | ||
+ | ! Здесь в подвыражения вкладываются другие | ||
+ | ! строковые константы с подвыражениями | ||
+ | </sxh> | ||
+ | Если нужно последовательность ''%%<<%%'' вывести на экран, или поместить в переменную, можно воспользоваться одним из этих способов: | ||
- | LCASE([$выражение]) - возвращает строку маленьких букв, полученную изменением регистра букв исходной строки [$выражение]. Пример: | + | * Разбить ''%%<<%%'' на ''%%'<'+'<%%''': <sxh qsp> |
+ | $text = '<'+'<var>>' | ||
+ | 'string <'+'<var>>' | ||
+ | </sxh> | ||
+ | * Использовать фигурные скобки: <sxh qsp> | ||
+ | $text={<<var>>} | ||
+ | *pl {string <<var>>} | ||
+ | </sxh> | ||
+ | **Фигурные скобки** — это ещё один способ создавать строковые константы. При их использовании создаются точно такие же строковые константы, как и в случае с обычными кавычками, однако в таких константах не раскрываются подвыражения. К тому же текст, размещённый в фигурных скобках не подсвечивается непосредственно как текст различными редакторами (например, Quest Generator), а подсвечивается как обычный код. Поэтому фигурные скобки обычно используют для создания [[help:dynamical|динамического кода]]. | ||
+ | <sxh qsp> | ||
+ | *pl { | ||
+ | Это текст в фигурных скобках, | ||
+ | здесь не раскрываются <<подвыражения>> | ||
+ | } | ||
+ | dynamic { | ||
+ | ! обычно в фигурных | ||
+ | ! скобках размещают | ||
+ | *pl "Код для оператора DYNAMIC" | ||
+ | } | ||
+ | </sxh> | ||
- | LCASE('TExT#') равно 'text#' | + | ===== Функции ===== |
+ | * ''%%LEN([$стр])%%'' - возвращает длину строки ''%%[$стр]%%''. <sxh qsp> | ||
+ | *pl len('Зелёные яблоки') &! на экране будет число 14 | ||
+ | </sxh> | ||
+ | * ''**$MID(**[$стр],[#начало],[#длина]**)**'' - вырезает из строки ''%%[$стр]%%'' строку, которая начинается с символа номер ''%%[#начало]%%'' и имеет длину ''%%[#длина]%%''. Нумерация символов в строке ведётся с **1**. | ||
+ | * Параметр ''%%[#длина]%%'' может отсутствовать, при этом вырезается вся строка, начиная с символа ''%%[#начало]%%''. | ||
+ | * Если ''%%[#начало]%%'' превышает длину строки, функция возвращает пустую строку. | ||
+ | * Примеры: <sxh qsp> | ||
+ | $MID('abcd', 1, 2) &! 'ab' | ||
+ | $MID('abcd', 2, 3) &! 'bcd' | ||
+ | $MID('abcd', 2) &! 'bcd' | ||
+ | $mid('abcd',5) &! '' (пустая строка) | ||
+ | </sxh> | ||
+ | * ''%%$UCASE([$стр])%%'' - возвращает строку больших букв, полученную изменением регистра букв исходной строки ''%%[$стр]%%''. <sxh qsp> | ||
+ | $UCASE('TexT#') &! 'TEXT#' | ||
+ | </sxh> | ||
+ | * ''%%$LCASE([$стр])%%'' - возвращает строку маленьких букв, полученную изменением регистра букв исходной строки ''%%[$стр]%%''. <sxh qsp> | ||
+ | $LCASE('TExT#') &! 'text#' | ||
+ | </sxh> | ||
+ | * ''%%$TRIM([$стр])%%'' - удаляет прилегающие пробелы и символы табуляции из ''%%[$стр]%%'' и возвращает полученную строку. <sxh qsp> | ||
+ | $TRIM(' TRIM TEST ') &! 'TRIM TEST' | ||
+ | </sxh> | ||
+ | * ''**$REPLACE(**[$стр],[$поиск],[$замена],[#количество_замен]**)**'' - заменяет в строке ''%%[$стр]%%'' несколько вхождений строки ''%%[$поиск]%%'' строкой ''%%[$замена]%%''. Замена производится слева-направо и только для неперескающихся вхождений. | ||
+ | * Параметр ''[#количество_замен]'' показывает, сколько вхождений должно быть заменено. Если параметр не указан, производится замена всех вхождений. | ||
+ | * Параметр ''%%[$замена]%%'' может отсутствовать, тогда он принимается равным пустой строке. | ||
+ | * Примеры: <sxh qsp> | ||
+ | $REPLACE('test', '12', '4') &! 'test' | ||
+ | $REPLACE('test', 'e', 's') &! 'tsst' | ||
+ | $REPLACE('test', 't', '34') &! '34es34' | ||
+ | $REPLACE('test', 't') &! 'es' | ||
+ | $REPLACE('test', 't', 'qu', 1) &! 'quest' | ||
+ | $REPLACE('test my test', 't', 'q', 3) &! 'qesq my qest' | ||
+ | </sxh> | ||
+ | * ''%%INSTR([$строка],[$поиск],[#начало])%%'' - возвращает номер позиции символа, с которого начинается вхождение строки ''%%[$поиск]%%'' в строку ''%%[$строка]%%'' (или **0**, если вхождения нет). Поиск начинается с символа номер ''%%[#начало]%%''. | ||
+ | * Параметр ''%%[#начало]%%'' может отсутствовать, при этом он принимается равным **1**. | ||
+ | * Примеры: | ||
+ | <sxh qsp> | ||
+ | INSTR('ABCDefgh','BC',1) &! 2 | ||
+ | INSTR('ABCDefgh','Be',1) &! 0 | ||
+ | INSTR('abcdef','abc') &! 1 | ||
+ | </sxh> | ||
+ | * ''%%ISNUM([$строка])%%'' - функция проверяет, является ли строка ''%%[$строка]%%'' числом. Функция возвращает ''%%0%%'' (ложь) или ''%%1%%'' (истина). <sxh qsp> | ||
+ | ISNUM(' 9999 ') &! 1 | ||
+ | ISNUM(' -888') &! 1 | ||
+ | ISNUM('777a6') &! 0 | ||
+ | ISNUM('') | ||
+ | &! 0, т.к. пустая строка не содержит числа | ||
+ | </sxh> | ||
+ | * ''%%VAL([$стр])%%'' - переводит строку цифр ''%%[$стр]%%'' в соответствующее число. При ошибке возвращает ''%%0%%''. <sxh qsp> | ||
+ | яблоки = VAL($яблоки) | ||
+ | val('123') & ! увидим 123 | ||
+ | val('') & ! увидим 0 | ||
+ | val('sand') & ! увидим 0 | ||
+ | </sxh> | ||
+ | * ''%%$STR([#число])%%'' - переводит число (числовое выражение) в соответствующую строку. <sxh qsp> | ||
+ | PL $STR(56) | ||
+ | </sxh> | ||
- | TRIM([$выражение]) - удаляет прилегающие пробелы и символы табуляции из [$выражение]. Затем возвращает полученную строку. Пример: | + | ===== Операторы ===== |
- | + | ||
- | + | ||
- | + | ||
- | TRIM(' TRIM TEST ') равно 'TRIM TEST' | + | |
- | + | ||
- | + | ||
- | + | ||
- | REPLACE([$выражение 1],[$выражение 2],[$выражение 3]) - заменяет в строке [$выражение 1] все вхождения строки [$выражение 2] строкой [$выражение 3]. Если [$выражение 3] отсутствует или указана пустая строка, то удаляет в исходной строке все вхождения искомой строки. Примеры: | + | |
- | + | ||
- | + | ||
- | + | ||
- | REPLACE('test', '12', '4') равно 'test' | + | |
- | + | ||
- | REPLACE('test', 'e', 's') равно 'tsst' | + | |
- | + | ||
- | REPLACE('test', 't', '34') равно '34es34' | + | |
- | + | ||
- | REPLACE('test', 't') равно 'es' | + | |
- | + | ||
- | + | ||
- | + | ||
- | INSTR([#выражение 1],[$выражение 2],[$выражение 3]) - возвращает номер позиции символа, с которого начинается вхождение строки [$выражение 3] в строку [$выражение 2] (или 0, если такой строки нет). Поиск начинается с символа номер [#выражение 1]. Параметр [#выражение 1] может отсутствовать, при этом он принимается равным 1. Примеры: | + | |
- | + | ||
- | + | ||
- | + | ||
- | INSTR(1,'ABCDefgh','BC') равно 2 | + | |
- | + | ||
- | INSTR(1,'ABCDefgh','Be') равно 0 | + | |
- | + | ||
- | INSTR('abcdef','abc') равно 1 | + | |
- | + | ||
- | + | ||
- | + | ||
- | ISNUM([$выражение]) - функция проверяет, все ли символы в строке являются цифрами (учитывая знак "-" в начале, прилегающие пробелы и символы табуляции). Если в указанной строке есть хотя бы один символ - не-цифра (исключая возможный "-" в начале и прилегающие пробелы / символы табуляции), то функция возвращает 0 (ложь), иначе -1 (истина). | + | |
- | + | ||
- | Функция полезна при проверке введённой играющим строки на число. Примеры: | + | |
- | + | ||
- | + | ||
- | + | ||
- | ISNUM('9999 ') равно -1 | + | |
- | + | ||
- | ISNUM(' -888') равно -1 | + | |
- | + | ||
- | ISNUM('777a6') равно 0 | + | |
- | + | ||
- | + | ||
- | + | ||
- | VAL([$выражение]) - переводит строку цифр [$выражение] в соответствующее число. Если [$выражение] равно '' (пустая строка) или если оно содержит не-цифры, то возвращается 0. | + | |
- | + | ||
- | + | ||
- | + | ||
- | STR([#выражение]) - переводит число (числовое выражение) [#выражение] в соответствующую строку. Например, | + | |
- | + | ||
- | + | ||
- | + | ||
- | PL STR(56) | + | |
- | + | ||
- | + | ||
- | + | ||
- | выведет строку "56". | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | STRCOMP([$выражение],[$шаблон]) - проводит сравнение строки [$выражение] на соответствие регулярному выражению [$шаблон]. Возвращает -1, если строка соответствует шаблону, иначе 0. Сравни с функцией "STRFIND". | + | |
- | + | ||
- | + | ||
- | + | ||
- | STRFIND([$выражение],[$шаблон],[#номер]) - возвращает подстроку в строке [$выражение], соответствующую группе с номером [#номер] регулярного выражения [$шаблон]. Если подстрока с указанным номером отсутствует, то возвращается пустая строка. Нумерация групп подстрок начинается с 1. Если параметр [#номер] отсутствует или равен 0, то возвращается подстрока, соответствующая всему регулярному выражению [$шаблон]. Примеры: | + | |
- | + | ||
- | + | ||
- | + | ||
- | STRFIND(' идти к пещере', '^(\S+)\s(\S+)\s(\S+)$', 0) = '' | + | |
- | + | ||
- | STRFIND('идти к пещере', '^(\S+)\s(\S+)\s(\S+)$', 1) = 'идти' | + | |
- | + | ||
- | STRFIND('идти к пещере', '^(\S+)\s(\S+)\s(\S+)$', 2) = 'к' | + | |
- | + | ||
- | STRFIND('идти к пещере', '^(\S+)\s(\S+)\s(\S+)$', 3) = 'пещере' | + | |
- | + | ||
- | STRFIND('идти к пещере', '^(\S+)\s(\S+)(\s(\S+))?$', 4) = 'пещере' | + | |
- | + | ||
- | STRFIND('искать ключ', '^(\S+)\s(\S+)(\s(\S+))?$', 1) = 'искать' | + | |
- | + | ||
- | STRFIND('искать', '^(\S+)\s(\S+)(\s(\S+))?$', 0) = '' | + | |
- | + | ||
- | STRFIND('искать', '^(\S+)\s(\S+)(\s(\S+))?$', 1) = '' | + | |
- | + | ||
- | STRFIND('искать', '^(\S+)(\s(\S+)(\s(\S+))?)?$', 1) = 'искать' | + | |
- | + | ||
- | STRFIND('идти к дому', 'к\s(\S+)', 0) = 'к дому' | + | |
- | + | ||
- | STRFIND('идти к дому', 'к\s(\S+)') = 'к дому' | + | |
- | + | ||
- | STRFIND('идти к дому', 'к\s(\S+)', 1) = 'дому' | + | |
- | + | ||
- | STRFIND('идти к своему дому', 'к\s(\S+)', 1) = 'своему' | + | |
- | + | ||
- | + | ||
- | + | ||
- | STRPOS([$выражение],[$шаблон],[#номер]) - возвращает позицию символа, с которого начинается вхождение подстроки в строке [$выражение], соответствующей группе с номером [#номер] регулярного выражения [$шаблон]. Если подстрока с указанным номером отсутствует, то возвращается 0. Нумерация групп подстрок начинается с 1. Если параметр [#номер] отсутствует или равен 0, то возвращается позиция символа, с которого начинается вхождение подстроки, соответствующей всему регулярному выражению [$шаблон]. | + | |
- | + | ||
- | Примеры: | + | |
- | + | ||
- | + | ||
- | + | ||
- | STRPOS(' идти к пещере', '^(\S+)\s(\S+)\s(\S+)$', 0) = 0 | + | |
- | + | ||
- | STRPOS('идти к пещере', '^(\S+)\s(\S+)\s(\S+)$', 1) = 1 | + | |
- | + | ||
- | STRPOS('идти к пещере', '^(\S+)\s(\S+)\s(\S+)$', 2) = 6 | + | |
- | + | ||
- | STRPOS('идти к пещере', '^(\S+)\s(\S+)\s(\S+)$', 3) = 8 | + | |
- | + | ||
- | STRPOS('идти к пещере', '^(\S+)\s(\S+)(\s(\S+))?$', 4) = 8 | + | |
- | + | ||
- | STRPOS('искать ключ', '^(\S+)\s(\S+)(\s(\S+))?$', 1) = 1 | + | |
- | + | ||
- | STRPOS('искать', '^(\S+)\s(\S+)(\s(\S+))?$', 0) = 0 | + | |
- | + | ||
- | STRPOS('искать', '^(\S+)\s(\S+)(\s(\S+))?$', 1) = 0 | + | |
- | + | ||
- | STRPOS('искать', '^(\S+)(\s(\S+)(\s(\S+))?)?$', 1) = 1 | + | |
- | + | ||
- | STRPOS('идти к дому', 'к\s(\S+)', 0) = 6 | + | |
- | STRPOS('идти к дому', 'к\s(\S+)') = 6 | + | * ''%%SCANSTR [$имя_массива], [$текст_для_разбора], [$регэксп], [#номер_группы]%%'' — оператор ищет в строке ''%%[$текст_для_разбора]%%'' непересекающиеся фрагменты, соответствующие регулярному выражению ''%%[$регэксп]%%'', и помещает их в массив ''%%[$имя_массива]%%''. Если параметр ''%%[#номер_группы]%%'' указан и отличается от нуля, в массив помещается не весь фрагмент целиком, а лишь та его часть, которая соответствует группе с указанным номером. |
+ | * Подробное описание оператора и примеры использования в разделе "[[help:arrays|массивы]]". | ||
- | STRPOS('идти к дому', 'к\s(\S+)', 1) = 8 | + | [[help:regexp|Вперёд: Регулярные выражения]] |
- | STRPOS('идти к своему дому', 'к\s(\S+)', 1) = 8 |