在Lua中的字符串替换

我正在寻找编写一个 Lua 函数,用于将一个字符串中的所有出现替换为另一个字符串,例如:

function string.replace(s, oldValue, newValue)
   return string.gsub(s, oldValue, newValue);
end;

我需要(除非 Lua 已经有了一个字符串替换函数)一个函数来转义 Lua 正则表达式模式字符串(除非 Lua 已经有了一个 EscapeRegularExpressionPattern 函数)

我试着开始编写正常的 string.replace 函数:

local function EscapeRegularExpression(pattern)
    -- "." ==> "%."
    local s = string.gsub(pattern, "%." "%%%.");

    return s;
end;

function string.replace(s, oldValue, newValue)
    oldValue = EscapeRegularExpression(oldValue);
    newValue = EscapeRegularExpression(newValue);

    return string.gsub(s, oldValue, newValue);
end;

但我不能轻易地想到所有必须被转义的 Lua 正则表达式模式关键字。

附加示例

另一个需求的示例可能是:

//Remove any locale thousands separator:
s = string.gsub(s, Locale.Thousand, "");

//Replace any locale decimal marks with a period
s = string.gsub(s, Locale.Decimal, "%.");
点赞
用户936986
用户936986

查看有关匹配模式的文档(Lua 5.1 中的 5.4.1 节),其中最有趣的可能是魔法字符列表:

x:(其中 x 不是魔法字符 ^$()%.[]*+-?)代表字符 x 本身。

在使用字符串进行 gsub 之前,请在前面添加 % 来转义它们,然后就完成了。

为了确保安全,您可以设置一个 while 循环,带有方便的“plain”标志和 string.sub 必要的字符串部分。

2012-09-02 15:15:57
用户438753
用户438753

我使用

-- 禁用正则表达式魔法字符^ $ () %. [] * + -? 
function strPlainText(strText)
    -- 对每个非字母数字字符(% W)使用%转义字符, 
    -- 其中%%是%转义,%1是原始字符 
    return strText:gsub((“%W”),“%%1”)
end - 函数strPlainText
2012-09-03 07:30:08