【问题标题】:Lua String patterns - shorter codeLua 字符串模式 - 更短的代码
【发布时间】:2013-02-28 13:40:09
【问题描述】:

这个可以拿吗:

a=[[do end workspace.Part["Child 1"].Object.child2["thing"]remove() do end]]
a=a:gsub("%.%a+","{F}%0{F}")  
a=a:gsub('(%[%s*([\'"]?).*%2%s*%]):remove%(%)','{F}%1{F}:remove()')
a=a:gsub('{F}%s*{F}','')
a=a:gsub('{F}.-{F}','filterremove(%0)')

Output: do end filterremove(Workspace.Part["Child 1"].Object.child2["thing"]) do end

并且只使用一个 gsub 来获得相同的结果,而不是两个? 不管 x.y、x[y]、[x][y] 等的组合。

【问题讨论】:

  • 提供示例输入输出字符串?
  • 输入:workspace.Part["Child"]:remove(),输出:filterremove(workspace.Part["Child"])
  • a=a:gsub("(.*)%:remove%(%)", "filterremove(%1)")
  • 这将尝试将整个程序“删除”到一个函数中。
  • Relevant。你不能从这里到达那里。

标签: string lua pattern-matching


【解决方案1】:

a:gsub("(%S*%b[]):remove%(%)", "filterremove(%1)")

【讨论】:

  • 我知道,但是您需要指定一个您希望看到的示例。或者几个例子。只要有人提出满足他们的实施方案,您就会得到所需的。
【解决方案2】:

您至少可以将其链接和换行:

a = [[do end workspace.Part["Child 1"]:remove() do end]]
a = a:gsub("%.%a+","{F}%0{F}")  
     :gsub('(%[%s*([\'"]?).*%2%s*%]):remove%(%)','{F}%1{F}:remove()')
     :gsub('{F}%s*{F}','')
     :gsub('{F}.-{F}','filterremove(%0)')

真的,这永远不会奏效。怎么样:

workspace.remove(x)
workspace["remove"](x)
getfenv()["work" .. "space"]["re".."move"](x)

【讨论】:

  • 还有空格呢:workspace . Part["..."] :remove(); OP 至少需要做出一些假设……
  • @Paul:我认为 OP 不能做出任何假设,因为他们几乎肯定会尝试对未知代码进行沙箱处理。
  • 我不知道,但如果是这样的话,这些尝试都是徒劳的。
  • 空格不是问题。 %s*,现在算了吧。我无法捕捉到它是否使用“删除”的连接和变量是问题所在。
猜你喜欢
  • 1970-01-01
  • 2013-10-13
  • 2021-10-03
  • 1970-01-01
  • 2017-11-07
  • 1970-01-01
  • 1970-01-01
  • 2021-06-07
  • 2011-03-29
相关资源
最近更新 更多