字符串中的每个字符都以另一个字符串中的任何顺序存在

时间:2018-03-24 19:13:13

标签: lua

我有一个字符串表:

self.rooms = { "n", "s", "e", "w", "nw", "ns", "ne", "sw", "se", "ew", "nsw", "nse", "swe", "nwe", "nsew" }

然后我得到一个字符串,它将包含这些字符串的任意组合,我希望在上表中找到包含任何顺序字母的字符串。

所以,如果我有一个字符串" es"然后我应该回来了:

" se"," nse"," nsew"," swe"因为他们都有字母' e' AND' s'在他们中间。

有没有匹配可以做到这一点?

2 个答案:

答案 0 :(得分:2)

试试这个:

rooms = { "n", "s", "e", "w", "nw", "ns", "ne", "sw", "se", "ew", "nsw", "nse", "swe", "nwe", "nsew" }

function normalize(s)
    local t=""
    if s:match("n") then t=t.."n"..".*" end
    if s:match("s") then t=t.."s"..".*" end
    if s:match("e") then t=t.."e"..".*" end
    if s:match("w") then t=t.."w" end
    return t
end

p = normalize("es")

for i,v in ipairs(rooms) do
    if v:match(p) then print(v) end
end

答案 1 :(得分:1)

我试图找到任何字母组合的解决方案,但必须遵守样本中每个字母的强制要求:

local rooms = { "n", "s", "e", "w", "nw", "ns", "ne", "sw", "se", "ew", "nsw", "nse", "swe", "nwe", "nsew" }

function MyFind (inp, str)
      if str=="" then return false end
      local found=true
      string.gsub(str, '.', function (c)  -- this code can be replaced with a 'for' loop
            if inp:find(c) and found then found=true else  found=false end
          end)
      return found ,inp  
 end

local chars = "se"    -- 1,2,3.. or more letters
for _,v in pairs(rooms) do
      a,b = MyFind (v, chars)
      if a then print (b) end
end

打印:

se
nse
swe
nsew