Как бы вы выделили часть строки на основе набора символов, окружающих ее (Lua) - PullRequest
0 голосов
/ 23 февраля 2019

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

1 Ответ

0 голосов
/ 02 марта 2019

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

https://www.lua.org/manual/5.3/manual.html#pdf-string.find

-- input:  str,  string to seperate
--         b1,   border symbol 1
--         b2,   border symbol 2
--         incl, true to include the border symbols in the returned value
-- return: sub,  the substring between the border symbols
--               or nil if the border symbols don't appear in str
local function border(str, b1, b2, incl)
  local sub
  local i = str:find(b1, 1, true)    -- using 'plain' means no escaping of magic
  if i == nil then return nil end    --    characters


  local j = str:find(b2, i+1, true)
  if j == nil then return nil end

  if incl then
    sub = str:sub(i, j)
  else
    sub = str:sub(i+1,j-1)
  end
  return sub
end

local test1 = "hello(world)"
local test2 = "(hello] world"
local test3 = "(hello-)(+world)"
local test4 = "hello, world"
print()

print(border(test1, '(', ')', true))
print(border(test1, '(', ')', false),"\n")

print(border(test2, '(', ']', true))
print(border(test2, '(', ']', false),"\n")

print(border(test3, '-', '+', true))
print(border(test3, '-', '+', false),"\n")

print(border(test4, ',', ',', true))
print(border(test4, ',', ',', false),"\n")

выведет:

> lua border.lua 

(world)
world   

(hello]
hello   

-)(+
)(  

nil
nil 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...