我有类似的东西
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
来获取完整的\\...\\
序列。是否有使用模式匹配或更简单的解决方案?
答案 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"),""))