String.find (Lua): различия между версиями

Материал из UoPilot
Перейти к навигации Перейти к поиску
(Новая страница: «== Описание == '''string.find''' - возвращает позицию подстроки в строке. Для поиска можно использо...»)
 
 
Строка 4: Строка 4:
 
== Синтаксис ==
 
== Синтаксис ==
 
Привязка к окну: нет.
 
Привязка к окну: нет.
<br>Работа со свернутым окном: да.
+
<br>Работа со свернутым окном: да.
&lt;br>Параметры заключаются в скобки и разделяются запятыми.
+
<br>Параметры заключаются в скобки и разделяются запятыми.
  string.find (&lt;nowiki>&lt;s>, &lt;шаблон>&lt;/nowiki> [, стартовая_позиция_поиска [, true])
+
  string.find (<nowiki><s>, <шаблон></nowiki> [, стартовая_позиция_поиска [, true])
 
Или:
 
Или:
  &lt;nowiki>&lt;s>:find(&lt;шаблон>&lt;/nowiki> [, стартовая_позиция_поиска [, true]])
+
  <nowiki><s>:find(<шаблон></nowiki> [, стартовая_позиция_поиска [, true]])
 
Где:
 
Где:
&lt;br>'''s''' - строка.
+
<br>'''s''' - строка.
&lt;br>'''шаблон''' - что искать или регулярное выражение.
+
<br>'''шаблон''' - что искать или регулярное выражение.
&lt;br>'''стартовая_позиция_поиска''' - стартовая позиция поиска, по умолчанию 1. Необязательный параметр.
+
<br>'''стартовая_позиция_поиска''' - стартовая позиция поиска, по умолчанию 1. Необязательный параметр.
&lt;br>'''true''' - если указано производится поиск подстроки как есть. Необязательный параметр.
+
<br>'''true''' - если указано производится поиск подстроки как есть. Необязательный параметр.
&lt;br>&lt;br>Поддерживаемые опции регулярных выражений:
+
<br><br>Поддерживаемые опции регулярных выражений:
 
  . -- Любой символ
 
  . -- Любой символ
 
  %a -- Буква (только англ.!)
 
  %a -- Буква (только англ.!)
Строка 94: Строка 94:
  
 
[[Tonumber (Lua)]]
 
[[Tonumber (Lua)]]
&lt;br>[[Tostring (Lua)]]
+
<br>[[Tostring (Lua)]]
&lt;br>[[String.format (Lua)]]
+
<br>[[String.format (Lua)]]
&lt;br>[[String.match (Lua)]]
+
<br>[[String.match (Lua)]]
&lt;br>[[String.gmatch (Lua)]]
+
<br>[[String.gmatch (Lua)]]
&lt;br>[[String.format (Lua)]]
+
<br>[[String.format (Lua)]]

Текущая версия на 11:18, 28 августа 2019

Описание

string.find - возвращает позицию подстроки в строке. Для поиска можно использовать регулярные выражения.

Синтаксис

Привязка к окну: нет.
Работа со свернутым окном: да.
Параметры заключаются в скобки и разделяются запятыми.

string.find (<s>, <шаблон> [, стартовая_позиция_поиска [, true])

Или:

<s>:find(<шаблон> [, стартовая_позиция_поиска [, true]])

Где:
s - строка.
шаблон - что искать или регулярное выражение.
стартовая_позиция_поиска - стартовая позиция поиска, по умолчанию 1. Необязательный параметр.
true - если указано производится поиск подстроки как есть. Необязательный параметр.

Поддерживаемые опции регулярных выражений:

.	-- Любой символ
%a	-- Буква (только англ.!)
%A	-- Любая буква (русская), символ, или цифра, кроме английской буквы 
%c	-- Управляющий символ
%d	-- Цифра
%D	-- Любая буква, или символ, кроме цифры
%l	-- Буква в нижней раскладке (только англ.!)
%L	-- Любая буква, символ, или цифра, кроме английской буквы в нижней раскладке
%p	-- Символ пунктуации
%P	-- Любая буква, символ, или цифра, кроме символа пунктуации
%s	-- Символ пробел
%S	-- Любая буква, символ, или цифра, кроме символа пробела
%u	-- Буква в верхней раскладке (только англ.!)
%U	-- Любая буква, символ, или цифра, кроме английской буквы в верхней раскладке
%w	-- Любая буква, или цифра (только англ.!)
%W	-- Любой символ, или буква (русская), кроме английской буквы, или цифры
%x	-- Шестнадцатеричное число
%X	-- Любая буква, или символ,  кроме цифры, или английской буквы, используемой в записи шестнадцатеричного числа 
%z	-- Строковые параметры, содержащие символы с кодом 0

Примеры

--lua
local a = "New York"                        -- строка
local start_pos = string.find(a, "Yo")      -- искать начальную позицию Yo
log (start_pos)
--lua
local a = "New York"                                 -- строка
local start_pos, end_pos = string.find(a, "York")    -- искать начальную и конечную позицию York
log (start_pos, end_pos)
--lua
local a = "New York"                         -- строка
local start_pos, end_pos = a:find("York")    -- альтернативная запись функции 
log (start_pos, end_pos)
--lua
local a = "3 кг яблок и 3 кг груш"           -- строка
local start_pos = a:find("3")                -- найти число 3 в строке
log (start_pos)
start_pos = a:find("3", 2)             -- найти число 3 в строке, начиная со 2й позиции
log (start_pos)

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

--lua
local str1 = "Координаты: X = 360, Y = 638"      -- строка
local start_pos, end_pos = str1:find("%d+")      -- найти позицию первого числа в строке
log(start_pos, end_pos)
--lua
local str1 = "Координаты: X = 360, Y = 638"      -- строка
local start_pos, end_pos, num1 = string.find(str1, "(%d+)")           -- найти позицию первого числа в строке и присвоить переменной num1
log(start_pos, end_pos, num1)
--lua
local str1 = "Координаты: X = 360, Y = 638"      -- строка
local _, _, num1 = string.find(str1, "(%d+)")    -- если позиции не нужны, то можно использовать _(нижнее подчёркивание)
log(num1)
--lua
local str1 = "Координаты: X = 360, Y = 638"      -- строка
local s, e, num1, num2 = string.find(str1, "(%d+), Y = (%d+)")    -- найти координаты X и Y, присвоить переменным num1 и num2
log(num1, num2)
-- или так
str1 = "Координаты: X = 123, Y = 547"      -- строка
s, e, num3, num4 = string.find(str1, "(%d+)[^%d]+(%d+)")    -- [^%d]* - означает любые символы, кроме числа
log(num3, num4)
--lua
log ("clear") log ("mode compact")
local str1 = "С 12:30 до 13:15 обед"      -- строка
local s, e, num1, num2, num3, num4 = str1:find("(%d+)[^%d]+(%d+)[^%d]+(%d+)[^%d]+(%d+)")    -- найти 4 числа, между числами могут присутствовать любые символы
log(num1, num2)
log(num3, num4)

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

Tonumber (Lua)
Tostring (Lua)
String.format (Lua)
String.match (Lua)
String.gmatch (Lua)
String.format (Lua)