Какая функция осуществляет поиск подстроки в строке и возвращает позицию ее первого символа

Обновлено: 30.06.2024

Строки в 1С 8.3 во встроенном языке 1с представляют собой значения примитивного типа Строка. Значения данного типа содержат строку в формате Unicode произвольной длины. Переменные строкового типа являются набором символов заключенных в кавычки.

Пример 1. Создадим строковую переменную с текстом.

Функции работы со строками в 1с 8.3

В данном разделе будут приведены основные функции, позволяющие изменять строки в 1с, либо анализировать информацию содержащуюся в них.

СтрДлина

СтрДлина( ). Возвращает количество символов содержащихся в строке, переданной в параметре.

Итогом выполнения данного кода будет вывод на экран количества символов строки: 11.

СокрЛ

СокрЛ( ). Отсекает незначащие символы, стоящие слева от первого значащего символа в строке.
Незначащие символы:

  • пробел;
  • неразрывный пробел;
  • табуляция;
  • возврат каретки;
  • перевод строки;
  • перевод формы (страницы).

СокрП

СокрП( ). Отсекает незначащие символы, стоящие справа от первого значащего символа в строке.

СокрЛП

СокрЛП( ). Отсекает незначащие символы, стоящие справа от первого значащего символа в строке, также отсекает незначащие символы, стоящие слева от первого значащего символа в строке. Данная функция используется чаще предыдущих двух, так как она более универсальна.

Пример 5. Убрать незначащие символы стоящие слева и справа в наименовании контрагента.

Лев( , ). Получает первые символы строки, число символов указывается в параметре ЧислоСимволов. Если указанное количество символов превышает длину строки, то возвращается вся строка.

Пример 6. Пусть в структуре Сотрудник содержаться имя, фамилия и отчество сотрудника. Получить строку с фамилией и инициалами.

Прав( , ). Получает последние символы строки, число символов указывается в параметре ЧислоСимволов. Если указанное количество символов превышает длину строки, то возвращается вся строка.

Сред( , , ). Получает подстроку из строки переданной в параметре Строка, начиная с символа номер которого указан в параметре НачальныйНомер и длиной переданной в параметр ЧислоСимволов. Нумерация символов в строке начинается с 1. Если в параметре НачальныйНомер указано значение, меньшее или равное нулю, то параметр принимает значение 1. Если параметр ЧислоСимволов не указан, то выбираются символы до конца строки.

Пример 8. Пусть в строковой переменной начиная с девятой позиции содержится код региона, следует получить его и записать в отдельную строку.

СтрНайти

СтрНайти( , , , , ). Осуществляет поиск указанной подстроки в строке, возвращает номер позиции первого символа найденной подстроки. Рассмотрим параметры данной функции:

  • Строка. Исходная строка;
  • ПодстрокаПоиска. Искомая подстрока;
  • НаправлениеПоиска. Указывает направление поиска подстроки в строке. Может принимать значения:
    • НаправлениеПоиска.СНачала;
    • НаправлениеПоиска.СКонца;

    ВРег( ). Преобразует все символы указанной строки в 1с 8 к верхнему регистру.

    НРег( ). Преобразует все символы указанной строки в 1с 8 к нижнему регистру.

    ТРег( ). Преобразует строку следующим образом: первый символ каждого слова переводится в верхний регистр, остальные символы слова переводятся в нижний регистр.

    Символ

    Символ( ). Получает символ по его коду в кодировке Unicod.

    КодСимвола

    КодСимвола( , ). Получает код символа в кодировке Unicode из строки указанной в первом параметре, расположенного в позиции указанной во втором параметре.

    ПустаяСтрока

    ПустаяСтрока( ). Проверяет состоит ли строка только из незначащих символов, то есть является ли она пустой.

    Пример 15. Проверить является ли пустой строка состоящая из трех пробелов.

    СтрЗаменить

    СтрЗаменить( , , ). Находит в исходной строке все вхождения подстроки поиска и заменяет ее на подстроку замены.

    СтрЧислоСтрок

    СтрЧислоСтрок( ). Позволяет посчитать количество строк в многострочной строке. Для перехода на новую строку в 1с 8 используется символ ПС (символ перевода строки).

    Итогом выполнения данного кода будет вывод на экран количества строк в тексте: 3

    СтрПолучитьСтроку

    СтрПолучитьСтроку( , ). Получает строку в многострочной строке по ее номеру. Нумерация строк начинается с 1.

    СтрЧислоВхождений

    СтрЧислоВхождений( , ). Возвращает число вхождений указанной подстроки в строку. Функция чувствительна к регистру.

    Итогом выполнения данного кода будет вывод на экран числа вхождений: 2.

    СтрНачинаетсяС

    СтрНачинаетсяС( , ). Проверяет начинается ли строка переданная в первом параметре, со строки во втором параметре.

    Пример 20. Определить начинается ли ИНН выбранного контрагента с цифры 1. Пусть в переменной Контрагент хранится ссылка на элемент справочника Контрагенты.

    СтрЗаканчиваетсяНа

    СтрЗаканчиваетсяНа( , ). Проверяет заканчивается ли строка переданная в первом параметре, на строку во втором параметре.

    Пример 21. Определить заканчивается ли ИНН выбранного контрагента на цифру 2. Пусть в переменной Контрагент хранится ссылка на элемент справочника Контрагенты.

    СтрРазделить

    СтрРазделить( , , ). Разделяет строку на части по указанным символам-разделителям и записывает полученные строки в массив. В первом параметре хранится исходная строка, во втором строка содержащая разделитель, в третьем указывается, нужно ли записывать в массив пустые строки (по умолчанию Истина).

    В результате выполнения будет получен массив с числами от 1 до 3-х.

    СтрСоединить

    СтрСоединить( , ). Преобразует массив строк из первого параметра в строку, содержащую все элементы массива через разделитель, указанный во втором параметре.

    Пример 23. Используя массив чисел из предыдущего примера, получить исходную строку.

    Прочитайте статью про работу с числами: Число в 1С 8.3 — функции работы с числами

    В этой статье рассматриваются различные методы поиска слова, символа или подстроки в тексте. Описываются преимущества и недостатки каждого метода.

    Поиск символа в строке — использование strpos() для регистрозависимого поиска

    Простейшим способом проверить, содержит ли строка определённое слово, является использование PHP функции strpos(). Она возвращает позицию первого вхождения подстроки в строке или FALSE, если соответствия не найдены. Поэтому можно сравнить значение, возвращаемое функцией strpos() с FALSE, чтобы проверить наличие подстроки. Пример:

    Обратите внимание, что я использовал оператор строгого неравенства (!==). Если искомое слово встречается в начале строки, функция strpos() вернёт 0. Это будет расценено оператором != как значение FALSE. Пример:

    При поиске целого слова (например, “на”) функция также вернёт значение TRUE, если строка содержит такие слова, как “она”, “вена” или “например”.

    Поиск символа в строке — использование функции stripos() для регистронезависимого поиска

    Для регистрозависимого поиска можно использовать функцию stripos(). Она работает аналогично функции strpos(). Единственное отличие заключается в том, что она игнорирует регистр при поиске подстроки внутри другой строки.

    Функция strpos() вернула бы значение FALSE во всех перечисленных выше случаях. Но функция stripos() проигнорировала регистр и вернула значение TRUE.

    Другим способом поиска, независящим от регистра, является преобразование всех строк и подстрок в одинаковый регистр, используя функции strtolower() и strtoupper(). Для проверки можно использовать strpos(). Но проще stripos().

    Поиск символа в строке — использование регулярных выражений

    Также для поиска можно использовать регулярные выражения. Они лучше подходят для случаев, когда вы ищете в строке более сложные конструкции.

    Но помните, что функция strpos() работает в три раза быстрее, чем регулярные выражения. Следующий пример демонстрирует, как с их помощью найти слово, символ в строке:

    Использование функции preg_match() имеет смысл только при сложном поиске. Например, для проверки того, содержит ли строка слова с десятью и более символами и т.п. Пример:

    Чтобы сделать поиск регистронезависимым, добавьте флаг i в конец шаблона. Пример реализации:

    Использование регулярных выражений для поиска точного вхождения слова

    Функции strpos() и stripos()работают быстрее, чем регулярные выражения. Но их использование для поиска точного вхождения слова может быть проблематичным.

    В подобных ситуациях лучше применять регулярные выражения. Можно использовать выражение b в шаблоне регулярного выражения, чтобы обозначить границу слова. Если слово, которое вы ищете, заключено в выражения b, функция preg_match() найдёт только точные вхождения слова и вернет FALSE для частичных совпадений. Вот пример:

    Использование strstr() для поиска подстроки

    PHP функция strstr() может быть использована для проверки вхождения символа или подстроки. Она возвращает часть исходной строки, начиная с первого вхождения искомого слова и до конца. Функция вернёт значение FALSE, если подстрока не найдена. Благодаря этому можно проверить, содержит ли строка подстроку. Вот пример:

    Для регистронезависимого поиска используйте функцию stristr().

    1. Лучший метод поиска символа или слова в строке – PHP функции strpos(). Если нужно провести регистронезависимый поиск, применяйтеstripos(). Обе функции просты в использовании и работают быстрее остальных методов.
    2. Для сложного поиска используйте регулярные выражения. Вы также можете применять их для простого поиска, но они работают медленнее, чем функция strpos().
    3. Регулярные выражения полезны, когда вы ищете точное вхождение слова. Например, при поиске слова “сто” функция strpos() также вернёт значение TRUE, если строка содержит слово “Место”. С другой стороны, можно использовать выражение b в функции preg_match(), которая в таком случае возвратит FALSE.
    4. Используйте strstr() для регистрозависимого поиска и stristr() для регистронезависимого.

    Пожалуйста, оставляйте ваши комментарии по текущей теме материала. Мы крайне благодарны вам за ваши комментарии, подписки, отклики, лайки, дизлайки!

    Пожалуйста, оставляйте свои мнения по текущей теме статьи. Мы очень благодарим вас за ваши комментарии, дизлайки, подписки, отклики, лайки!

    Говоря о выделении подстроки из искомой строки в языке PHP, в первую очередь стоит отметить функцию strstr() :

    Она находит первое появление искомой строки и возвращает подстроку, начиная с этой искомой строки до конца исходной строки .

    Если строка для поиска не найдена, то функция вернет false . Если строка для поиска не принадлежит строковому типу данных, то она переводится в целое число и рассматривается как код символа . Кроме того, эта функция чувствительна к регистру , т.е. если мы будем параллельно искать вхождения слов "Идея" и "идея", то результаты будут разными. Вместо strstr() можно использовать абсолютно идентичную ей функцию strchr() .

    Пример 8.4. Выделим из строки , содержащей название и автора исследования, подстроку, начинающуюся со слова "Название":

    В результате получим:

    Для реализации регистронезависимого поиска подстроки существует соответствующий аналог этой функции – функция stristr (исходная строка, искомая строка) . Действует и используется она точно так же, как и strstr() , за исключением того, что регистр, в котором записаны символы искомой строки , не играет роли при поиске.

    Очевидно, что функция strstr() не слишком часто используется – на практике редко бывает нужно получить подстроку, начинающуюся с определенного слова или строки . Но в некоторых случаях и она может пригодиться. Кроме того, в PHP есть и более удобные функции для поиска вхождений. Наиболее мощные из них, конечно, связаны с регулярными выражениями. Их мы рассмотрим в одной из последующих лекций.

    Функция substr

    Иногда мы не знаем, с каких символов начинается искомая строка , но знаем, например, что начинается она с пятого символа и заканчивается за два символа до конца исходной строки . Как выделить подстроку по такому описанию? Очень просто, с помощью функции substr() . Ее синтаксис можно записать следующим образом:

    Эта функция возвращает часть строки длиной, заданной параметром длина , начиная с символа, указанного параметром позиция начального символа . Позиция, с которой начинается выделяемая подстрока, может быть как положительным целым числом, так и отрицательным. В последнем случае отсчет элементов производится с конца строки . Если параметр длина опущен, то substr() возвращает подстроку от указанного символа и до конца исходной строки . Длина выделяемой подстроки тоже может быть задана отрицательным числом. Это означает, что указанное число символов отбрасывается с конца строки .

    Пример 8.5. Допустим, у нас есть фраза, выделенная жирным шрифтом с помощью тега языка HTML. Мы хотим получить эту же фразу, но в обычном стиле. Напишем такую программу:

    В результате работы этого скрипта получим:

    Hello, world! Hello, world!

    На самом деле решить такую задачу можно гораздо проще, с помощью функции strip_tags :

    Эта функция возвращает строку , из которой удалены все html и php-теги. С помощью дополнительного аргумента можно задать теги, которые не будут удалены из строки . Список из нескольких тегов вводится без каких-либо знаков разделителей. Функция выдает предупреждение, если встречает неправильные или неполные теги.

    В результате получим:

    Bold text Italic text

    Bold text Italic text

    Bold text Italic text

    В результате получим:

    Если нам нужно получить один конкретный символ из строки , зная его порядковый номер, то не следует задействовать функции типа substr . Можно воспользоваться более простым синтаксисом – записывая номер символа в фигурных скобках после имени строковой переменной. В контексте предыдущего примера букву " р ", расположенную второй по счету, можно получить так:

    Заметим, что номером этого символа является число один, а не два, так как нумерация символов строки производится начиная с нуля.

    Раз уж мы начали говорить о символах в строке и их нумерации, то невольно возникает вопрос, сколько всего символов в строке и как это вычислить. Число символов в строке – это длина строки . Вычислить длину строки можно с помощью функции strlen (строка) . Например, длина строки "Разработка информационной модели" вычисляется с помощью команды: strlen ("Разработка информационной модели"); и равна 32 символам.

    Итак, как выделять и находить подстроки, мы рассмотрели. Теперь научимся заменять строку , входящую в состав исходной строки , на другую строку по нашему выбору.

    Во всех функциях, поиск регистрозависимый по умолчанию. Существуют варианты функций для регистронезависимого поиска.

    position(haystack, needle), locate(haystack, needle)

    Поиск подстроки needle в строке haystack .

    Возвращает позицию (в байтах) найденной подстроки в строке, начиная с 1, или 0, если подстрока не найдена.

    Для поиска без учета регистра используйте функцию positionCaseInsensitive.

    Синтаксис

    Алиас: locate(haystack, needle[, start_pos]) .

    Синтаксис position(needle IN haystack) обеспечивает совместимость с SQL, функция работает так же, как position(haystack, needle) .

    Аргументы

    • haystack — строка, по которой выполняется поиск. Строка.
    • needle — подстрока, которую необходимо найти. Строка.
    • start_pos — опциональный параметр, позиция символа в строке, с которого начинается поиск. UInt.

    Возвращаемые значения

    • Начальная позиция в байтах (начиная с 1), если подстрока найдена.
    • 0, если подстрока не найдена.

    Примеры

    Аналогичная фраза на русском содержит символы, которые не могут быть представлены в однобайтовой кодировке. Функция возвращает неожиданный результат (используйте функцию positionUTF8 для символов, которые не могут быть представлены одним байтом):

    Примеры работы функции с синтаксисом POSITION(needle IN haystack)

    positionCaseInsensitive

    Такая же, как и position, но работает без учета регистра. Возвращает позицию в байтах найденной подстроки в строке, начиная с 1.

    Работает при допущении, что строка содержит набор байт, представляющий текст в однобайтовой кодировке. Если допущение не выполнено — то возвращает неопределенный результат (не кидает исключение). Если символ может быть представлен с помощью двух байтов, он будет представлен двумя байтами и так далее.

    Синтаксис

    Аргументы

    • haystack — строка, по которой выполняется поиск. Строка.
    • needle — подстрока, которую необходимо найти. Строка.
    • start_pos — опциональный параметр, позиция символа в строке, с которого начинается поиск. UInt.

    Возвращаемые значения

    • Начальная позиция в байтах (начиная с 1), если подстрока найдена.
    • 0, если подстрока не найдена.

    Пример

    positionUTF8

    Возвращает позицию (в кодовых точках Unicode) найденной подстроки в строке, начиная с 1.

    Работает при допущении, что строка содержит набор кодовых точек, представляющий текст в кодировке UTF-8. Если допущение не выполнено — то возвращает неопределенный результат (не кидает исключение). Если символ может быть представлен с помощью двух кодовых точек, он будет представлен двумя и так далее.

    Для поиска без учета регистра используйте функцию positionCaseInsensitiveUTF8.

    Синтаксис

    Аргументы

    • haystack — строка, по которой выполняется поиск. Строка.
    • needle — подстрока, которую необходимо найти. Строка.
    • start_pos — опциональный параметр, позиция символа в строке, с которого начинается поиск. UInt.

    Возвращаемые значения

    • Начальная позиция в кодовых точках Unicode (начиная с 1), если подстрока найдена.
    • 0, если подстрока не найдена.

    Примеры

    Запрос для символа é , который представлен одной кодовой точкой U+00E9 :

    Запрос для символа é , который представлен двумя кодовыми точками U+0065U+0301 :

    positionCaseInsensitiveUTF8

    Такая же, как и positionUTF8, но работает без учета регистра. Возвращает позицию (в кодовых точках Unicode) найденной подстроки в строке, начиная с 1.

    Работает при допущении, что строка содержит набор кодовых точек, представляющий текст в кодировке UTF-8. Если допущение не выполнено — то возвращает неопределенный результат (не кидает исключение). Если символ может быть представлен с помощью двух кодовых точек, он будет представлен двумя и так далее.

    Синтаксис

    Аргументы

    • haystack — строка, по которой выполняется поиск. Строка.
    • needle — подстрока, которую необходимо найти. Строка.
    • start_pos — опциональный параметр, позиция символа в строке, с которого начинается поиск. UInt.

    Возвращаемые значения

    • Начальная позиция в байтах (начиная с 1), если подстрока найдена.
    • 0, если подстрока не найдена.

    Пример

    multiSearchAllPositions

    The same as position but returns Array of positions (in bytes) of the found corresponding substrings in the string. Positions are indexed starting from 1.

    The search is performed on sequences of bytes without respect to string encoding and collation.

    • For case-insensitive ASCII search, use the function multiSearchAllPositionsCaseInsensitive .
    • For search in UTF-8, use the function multiSearchAllPositionsUTF8.
    • For case-insensitive UTF-8 search, use the function multiSearchAllPositionsCaseInsensitiveUTF8.

    Syntax

    Parameters

    • haystack — string, in which substring will to be searched. String.
    • needle — substring to be searched. String.

    Returned values

    • Array of starting positions in bytes (counting from 1), if the corresponding substring was found and 0 if not found.

    Example

    multiSearchAllPositionsUTF8

    multiSearchFirstPosition(haystack, [needle1, needle2, …, needlen])

    Так же, как и position , только возвращает оффсет первого вхождения любого из needles.

    Для поиска без учета регистра и/или в кодировке UTF-8 используйте функции multiSearchFirstPositionCaseInsensitive, multiSearchFirstPositionUTF8, multiSearchFirstPositionCaseInsensitiveUTF8 .

    multiSearchFirstIndex(haystack, [needle1, needle2, …, needlen])

    Возвращает индекс i (нумерация с единицы) первой найденной строки needlei в строке haystack и 0 иначе.

    Для поиска без учета регистра и/или в кодировке UTF-8 используйте функции multiSearchFirstIndexCaseInsensitive, multiSearchFirstIndexUTF8, multiSearchFirstIndexCaseInsensitiveUTF8 .

    multiSearchAny(haystack, [needle1, needle2, …, needlen])

    Возвращает 1, если хотя бы одна подстрока needlei нашлась в строке haystack и 0 иначе.

    Для поиска без учета регистра и/или в кодировке UTF-8 используйте функции multiSearchAnyCaseInsensitive, multiSearchAnyUTF8, multiSearchAnyCaseInsensitiveUTF8 .

    Во всех функциях multiSearch* количество needles должно быть меньше 2 8 из-за особенностей реализации.

    match(haystack, pattern)

    Проверка строки на соответствие регулярному выражению pattern. Регулярное выражение re2. Синтаксис регулярных выражений re2 является более ограниченным по сравнению с регулярными выражениями Perl (подробнее).
    Возвращает 0 (если не соответствует) или 1 (если соответствует).

    Обратите внимание, что для экранирования в регулярном выражении, используется символ \ (обратный слеш). Этот же символ используется для экранирования в строковых литералах. Поэтому, чтобы экранировать символ в регулярном выражении, необходимо написать в строковом литерале \ (два обратных слеша).

    Регулярное выражение работает со строкой как с набором байт. Регулярное выражение не может содержать нулевые байты.
    Для шаблонов на поиск подстроки в строке, лучше используйте LIKE или position, так как они работают существенно быстрее.

    multiMatchAny(haystack, [pattern1, pattern2, …, patternn])

    То же, что и match , но возвращает ноль, если ни одно регулярное выражение не подошло и один, если хотя бы одно. Используется библиотека hyperscan для соответствия регулярных выражений. Для шаблонов на поиск многих подстрок в строке, лучше используйте multiSearchAny , так как она работает существенно быстрее.

    Длина любой строки из haystack должна быть меньше 2 32 байт, иначе бросается исключение. Это ограничение связано с ограничением hyperscan API.

    multiMatchAnyIndex(haystack, [pattern1, pattern2, …, patternn])

    То же, что и multiMatchAny , только возвращает любой индекс подходящего регулярного выражения.

    multiMatchAllIndices(haystack, [pattern1, pattern2, …, patternn])

    То же, что и multiMatchAny , только возвращает массив всех индексов всех подходящих регулярных выражений в любом порядке.

    multiFuzzyMatchAny(haystack, distance, [pattern1, pattern2, …, patternn])

    То же, что и multiMatchAny , но возвращает 1 если любой шаблон соответствует haystack в пределах константного редакционного расстояния. Эта функция основана на экспериментальной библиотеке hyperscan и может быть медленной для некоторых частных случаев. Производительность зависит от значения редакционного расстояния и используемых шаблонов, но всегда медленнее по сравнению с non-fuzzy вариантами.

    multiFuzzyMatchAnyIndex(haystack, distance, [pattern1, pattern2, …, patternn])

    То же, что и multiFuzzyMatchAny , только возвращает любой индекс подходящего регулярного выражения в пределах константного редакционного расстояния.

    multiFuzzyMatchAllIndices(haystack, distance, [pattern1, pattern2, …, patternn])

    То же, что и multiFuzzyMatchAny , только возвращает массив всех индексов всех подходящих регулярных выражений в любом порядке в пределах константного редакционного расстояния.

    multiFuzzyMatch* функции не поддерживают UTF-8 закодированные регулярные выражения, и такие выражения рассматриваются как байтовые из-за ограничения hyperscan.

    Чтобы выключить все функции, использующие hyperscan, используйте настройку SET allow_hyperscan = 0; .

    extract(haystack, pattern)

    Извлечение фрагмента строки по регулярному выражению. Если haystack не соответствует регулярному выражению pattern, то возвращается пустая строка. Если регулярное выражение не содержит subpattern-ов, то вынимается фрагмент, который подпадает под всё регулярное выражение. Иначе вынимается фрагмент, который подпадает под первый subpattern.

    extractAll(haystack, pattern)

    Извлечение всех фрагментов строки по регулярному выражению. Если haystack не соответствует регулярному выражению pattern, то возвращается пустая строка. Возвращается массив строк, состоящий из всех соответствий регулярному выражению. В остальном, поведение аналогично функции extract (по прежнему, вынимается первый subpattern, или всё выражение, если subpattern-а нет).

    extractAllGroupsHorizontal

    Разбирает строку haystack на фрагменты, соответствующие группам регулярного выражения pattern . Возвращает массив массивов, где первый массив содержит все фрагменты, соответствующие первой группе регулярного выражения, второй массив - соответствующие второй группе, и т.д.

    Функция extractAllGroupsHorizontal работает медленнее, чем функция extractAllGroupsVertical.

    Синтаксис

    Аргументы

    • haystack — строка для разбора. Тип: String.
    • pattern — регулярное выражение, построенное по синтаксическим правилам re2. Выражение должно содержать группы, заключенные в круглые скобки. Если выражение не содержит групп, генерируется исключение. Тип: String.

    Возвращаемое значение

    Если в строке haystack нет групп, соответствующих регулярному выражению pattern , возвращается массив пустых массивов.

    Пример

    Смотрите также

    extractAllGroupsVertical

    Разбирает строку haystack на фрагменты, соответствующие группам регулярного выражения pattern . Возвращает массив массивов, где каждый массив содержит по одному фрагменту, соответствующему каждой группе регулярного выражения. Фрагменты группируются в массивы в соответствии с порядком появления в исходной строке.

    Синтаксис

    Аргументы

    • haystack — строка для разбора. Тип: String.
    • pattern — регулярное выражение, построенное по синтаксическим правилам re2. Выражение должно содержать группы, заключенные в круглые скобки. Если выражение не содержит групп, генерируется исключение. Тип: String.

    Возвращаемое значение

    Если в строке haystack нет групп, соответствующих регулярному выражению pattern , возвращается пустой массив.

    Пример

    Смотрите также

    like(haystack, pattern), оператор haystack LIKE pattern

    Проверка строки на соответствие простому регулярному выражению.
    Регулярное выражение может содержать метасимволы % и _ .

    % обозначает любое количество любых байт (в том числе, нулевое количество символов).

    _ обозначает один любой байт.

    Для экранирования метасимволов, используется символ \ (обратный слеш). Смотрите замечание об экранировании в описании функции match.

    Для регулярных выражений вида %needle% действует более оптимальный код, который работает также быстро, как функция position .
    Для остальных регулярных выражений, код аналогичен функции match.

    notLike(haystack, pattern), оператор haystack NOT LIKE pattern

    То же, что like, но с отрицанием.

    ilike

    Нечувствительный к регистру вариант функции like. Вы можете использовать оператор ILIKE вместо функции ilike .

    Синтаксис

    Аргументы

    • haystack — входная строка. String.
    • pattern — если pattern не содержит процента или нижнего подчеркивания, тогда pattern представляет саму строку. Нижнее подчеркивание ( _ ) в pattern обозначает любой отдельный символ. Знак процента ( % ) соответствует последовательности из любого количества символов: от нуля и более.

    Некоторые примеры pattern :

    Возвращаемые значения

    • Правда, если строка соответствует pattern .
    • Ложь, если строка не соответствует pattern .

    Пример

    Смотрите также

    ngramDistance(haystack, needle)

    Вычисление 4-граммного расстояния между haystack и needle : считается симметрическая разность между двумя мультимножествами 4-грамм и нормализуется на сумму их мощностей. Возвращает число float от 0 до 1 – чем ближе к нулю, тем больше строки похожи друг на друга. Если константный needle или haystack больше чем 32КБ, кидается исключение. Если некоторые строки из неконстантного haystack или needle больше 32КБ, расстояние всегда равно единице.

    Для поиска без учета регистра и/или в формате UTF-8 используйте функции ngramDistanceCaseInsensitive, ngramDistanceUTF8, ngramDistanceCaseInsensitiveUTF8 .

    ngramSearch(haystack, needle)

    То же, что и ngramDistance , но вычисляет несимметричную разность между needle и haystack – количество n-грамм из needle минус количество общих n-грамм, нормированное на количество n-грамм из needle . Чем ближе результат к единице, тем вероятнее, что needle внутри haystack . Может быть использовано для приближенного поиска.

    Для поиска без учета регистра и/или в формате UTF-8 используйте функции ngramSearchCaseInsensitive, ngramSearchUTF8, ngramSearchCaseInsensitiveUTF8 .

    Для случая UTF-8 мы используем триграммное расстояние. Вычисление n-граммного расстояния не совсем честное. Мы используем 2-х байтные хэши для хэширования n-грамм, а затем вычисляем (не)симметрическую разность между хэш таблицами – могут возникнуть коллизии. В формате UTF-8 без учета регистра мы не используем честную функцию tolower – мы обнуляем 5-й бит (нумерация с нуля) каждого байта кодовой точки, а также первый бит нулевого байта, если байтов больше 1 – это работает для латиницы и почти для всех кириллических букв.

    countMatches(haystack, pattern)

    Возвращает количество совпадений, найденных в строке haystack , для регулярного выражения pattern .

    Строки в 1С 8.3 во встроенном языке 1с представляют собой значения примитивного типа Строка. Значения данного типа содержат строку в формате Unicode произвольной длины. Переменные строкового типа являются набором символов заключенных в кавычки.

    Пример 1. Создадим строковую переменную с текстом.

    Функции работы со строками в 1с 8.3

    В данном разделе будут приведены основные функции, позволяющие изменять строки в 1с, либо анализировать информацию содержащуюся в них.

    СтрДлина

    СтрДлина( ). Возвращает количество символов содержащихся в строке, переданной в параметре.

    Итогом выполнения данного кода будет вывод на экран количества символов строки: 11.

    СокрЛ

    СокрЛ( ). Отсекает незначащие символы, стоящие слева от первого значащего символа в строке.
    Незначащие символы:

    • пробел;
    • неразрывный пробел;
    • табуляция;
    • возврат каретки;
    • перевод строки;
    • перевод формы (страницы).

    СокрП

    СокрП( ). Отсекает незначащие символы, стоящие справа от первого значащего символа в строке.

    СокрЛП

    СокрЛП( ). Отсекает незначащие символы, стоящие справа от первого значащего символа в строке, также отсекает незначащие символы, стоящие слева от первого значащего символа в строке. Данная функция используется чаще предыдущих двух, так как она более универсальна.

    Пример 5. Убрать незначащие символы стоящие слева и справа в наименовании контрагента.

    Лев( , ). Получает первые символы строки, число символов указывается в параметре ЧислоСимволов. Если указанное количество символов превышает длину строки, то возвращается вся строка.

    Пример 6. Пусть в структуре Сотрудник содержаться имя, фамилия и отчество сотрудника. Получить строку с фамилией и инициалами.

    Прав( , ). Получает последние символы строки, число символов указывается в параметре ЧислоСимволов. Если указанное количество символов превышает длину строки, то возвращается вся строка.

    Сред( , , ). Получает подстроку из строки переданной в параметре Строка, начиная с символа номер которого указан в параметре НачальныйНомер и длиной переданной в параметр ЧислоСимволов. Нумерация символов в строке начинается с 1. Если в параметре НачальныйНомер указано значение, меньшее или равное нулю, то параметр принимает значение 1. Если параметр ЧислоСимволов не указан, то выбираются символы до конца строки.

    Пример 8. Пусть в строковой переменной начиная с девятой позиции содержится код региона, следует получить его и записать в отдельную строку.

    СтрНайти

    СтрНайти( , , , , ). Осуществляет поиск указанной подстроки в строке, возвращает номер позиции первого символа найденной подстроки. Рассмотрим параметры данной функции:

    • Строка. Исходная строка;
    • ПодстрокаПоиска. Искомая подстрока;
    • НаправлениеПоиска. Указывает направление поиска подстроки в строке. Может принимать значения:
      • НаправлениеПоиска.СНачала;
      • НаправлениеПоиска.СКонца;

      ВРег( ). Преобразует все символы указанной строки в 1с 8 к верхнему регистру.

      НРег( ). Преобразует все символы указанной строки в 1с 8 к нижнему регистру.

      ТРег( ). Преобразует строку следующим образом: первый символ каждого слова переводится в верхний регистр, остальные символы слова переводятся в нижний регистр.

      Символ

      Символ( ). Получает символ по его коду в кодировке Unicod.

      КодСимвола

      КодСимвола( , ). Получает код символа в кодировке Unicode из строки указанной в первом параметре, расположенного в позиции указанной во втором параметре.

      ПустаяСтрока

      ПустаяСтрока( ). Проверяет состоит ли строка только из незначащих символов, то есть является ли она пустой.

      Пример 15. Проверить является ли пустой строка состоящая из трех пробелов.

      СтрЗаменить

      СтрЗаменить( , , ). Находит в исходной строке все вхождения подстроки поиска и заменяет ее на подстроку замены.

      СтрЧислоСтрок

      СтрЧислоСтрок( ). Позволяет посчитать количество строк в многострочной строке. Для перехода на новую строку в 1с 8 используется символ ПС (символ перевода строки).

      Итогом выполнения данного кода будет вывод на экран количества строк в тексте: 3

      СтрПолучитьСтроку

      СтрПолучитьСтроку( , ). Получает строку в многострочной строке по ее номеру. Нумерация строк начинается с 1.

      СтрЧислоВхождений

      СтрЧислоВхождений( , ). Возвращает число вхождений указанной подстроки в строку. Функция чувствительна к регистру.

      Итогом выполнения данного кода будет вывод на экран числа вхождений: 2.

      СтрНачинаетсяС

      СтрНачинаетсяС( , ). Проверяет начинается ли строка переданная в первом параметре, со строки во втором параметре.

      Пример 20. Определить начинается ли ИНН выбранного контрагента с цифры 1. Пусть в переменной Контрагент хранится ссылка на элемент справочника Контрагенты.

      СтрЗаканчиваетсяНа

      СтрЗаканчиваетсяНа( , ). Проверяет заканчивается ли строка переданная в первом параметре, на строку во втором параметре.

      Пример 21. Определить заканчивается ли ИНН выбранного контрагента на цифру 2. Пусть в переменной Контрагент хранится ссылка на элемент справочника Контрагенты.

      СтрРазделить

      СтрРазделить( , , ). Разделяет строку на части по указанным символам-разделителям и записывает полученные строки в массив. В первом параметре хранится исходная строка, во втором строка содержащая разделитель, в третьем указывается, нужно ли записывать в массив пустые строки (по умолчанию Истина).

      В результате выполнения будет получен массив с числами от 1 до 3-х.

      СтрСоединить

      СтрСоединить( , ). Преобразует массив строк из первого параметра в строку, содержащую все элементы массива через разделитель, указанный во втором параметре.

      Пример 23. Используя массив чисел из предыдущего примера, получить исходную строку.

      Прочитайте статью про работу с числами: Число в 1С 8.3 — функции работы с числами

      Читайте также: