Lua:替换子字符串

时间:2018-11-21 11:39:39

标签: lua substring lua-patterns

我有类似的东西

str = "What a wonderful string //011// this is"

我必须将//011//替换为convertToRoman(011),然后得到

str = "What a wonderful string XI this is"

但是,转换为罗马数字在这里没有问题。 字符串str也可能没有//...//。在这种情况下,它应该只返回相同的字符串。

function convertSTR(str)
  if not string.find(str,"//") then 
    return str 
  else 
    replace //...// with convertToRoman(...)
  end
  return str
end

我知道我可以使用string.find来获取完整的\\...\\序列。是否有使用模式匹配或更简单的解决方案?

2 个答案:

答案 0 :(得分:4)

string.gsub接受替代功能。所以,这应该工作

new = str:gsub("//(.-)//", convertToRoman)

答案 1 :(得分:1)

我喜欢LPEG,因此这里是LPEG的解决方案:

local lpeg = require"lpeg"
local C, Ct, P, R = lpeg.C, lpeg.Ct, lpeg.P, lpeg.R

local convert = function(x)
    return "ROMAN"
end

local slashed = P"//" * (R("09")^1 / convert) * P"//"
local other = C((1 - slashed)^0)
local grammar =  Ct(other * (slashed * other)^0)

print(table.concat(grammar:match("What a wonderful string //011// this is"),""))