如何通过一组符号将字符串中的某一部分分离出来(Lua)

我遇到了将带有括号或其他符号的字符串分离出来的困难,我想编写一个函数来输入两个符号作为“边界符号”来包含我想要捕获的字符串部分,然后该函数将查找这些符号并将字符串分离出来。我想知道这是否可能,如果可能,我将如何做到。

点赞
用户2242940
用户2242940

你可以使用“plain”字符串查找函数,这样你就不必担心转义特殊字符。

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

- 输入:   str,  要分隔的字符串
         b1,   分隔边界符 1
         b2,   分隔边界符 2
         incl, true 表示返回的值中包含分隔边界符
- 返回值:  sub,  位于分隔边界符之间的子字符串
                如果分隔边界符没有出现在 str 中,返回 nil
function border(str, b1, b2, incl)
  local sub
  local i = str:find(b1, 1, true)    -- 使用“plain”表示不需要转义特殊字符
  if i == nil then return nil end    

  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
2019-03-02 04:35:04