0

Lua コードを含む文字列を照合しようとしています。

a = [[workspace.Object["Child"]:remove()]]

.xこれを行うために、 or['x']がどのような順序であるか、またはそれらの数に関係なく一致するオプションを作成しようとしています。

私が遭遇したいくつかの問題:

  • 括弧内の複数の組み合わせ文字/パターンを一致させるにはどうすればよいですか? またはまたはに[abc]一致しますが、 には一致しません。abcabc
  • に修飾子を追加するにはどうすればよい%b[]ですか? 元。%b[]+合わせる['x']['x']['x']
  • のようなものに一致させることができれば%[.-%] *、それは同じように機能します。
4

1 に答える 1

1

Lua は正規表現を完全にはサポートしていません。
ただし、中間文字列を使用して、タスクを段階的に実行できます。

local str0 = [[workspace.Object["Child"]['xx'][5].xxx:remove()]]
local str = str0
   :gsub('%b[]',
      function(s)
         return s:gsub('^%[%s*([\'"]?)(.*)%1%s*%]$','{%2}')
      end
   )
   :gsub('[%.:]%s*([%w_]+)','{%1}')

print(str0)
print(str)
print()
for w in str:gmatch'{(.-)}' do
   print(w)
end

---------------------------
-- output
---------------------------
workspace.Object["Child"]['xx'][5].xxx:remove()
workspace{Object}{Child}{xx}{5}{xxx}{remove}()

Object
Child
xx
5
xxx
remove

編集 :

local str0 = [[workspace.Object["Child"]['xx'][5][ [=[xxx]=] ]:remove()]]
local str = str0
   :gsub('%b[]',
      function(s)
         return s:gsub('^%[%s*([\'"]?).*%1%s*%]$','{%0}')
      end
   )
   :gsub('%.%s*[%w_]+','{%0}')
   :gsub(':%s*[%w_]+%s*([\'"]).-%1','{%0}')
   :gsub(':%s*[%w_]+%s*%b()','{%0}')
   :gsub('{(:%s*remove%s*%(%s*%))}','%1')
   :gsub('}%s*{', '')
   :gsub('([%w_]+)%s*(%b{})%s*:%s*remove%s*%(%s*%)',
      function(s1, s2)
         return 'removefilter('..s1..s2:match'^{(.*)}$'..')'
      end
   )
   :gsub('([%w_]+)%s*:%s*remove%s*%(%s*%)','removefilter(%1)')
   :gsub('[{}]', '')

print(str0)
print(str)

---------------------------
-- output
---------------------------
workspace.Object["Child"]['xx'][5][ [=[xxx]=] ]:remove()
removefilter(workspace.Object["Child"]['xx'][5][ [=[xxx]=] ])
于 2013-02-27T19:21:38.310 に答える