Lua普通用string.gsub搜索?

时间:2015-04-08 00:18:43

标签: string lua

使用Lua的string.find函数,您可以传递一个可选的第四个参数来启用纯搜索。来自Lua wiki

  

模式参数还允许更复杂的搜索。见   PatternsTutorial了解更多信息。我们可以关掉这个模式   通过使用可选的第四个参数plain匹配功能。川   取一个布尔值,必须以索引为前缀。如,

= string.find("Hello Lua user", "%su")         -- find a space character followed by "u"

10      11

= string.find("Hello Lua user", "%su", 1, true) -- turn on plain searches, now not found

nil

基本上,我想知道如何使用Lua的string.gsub函数完成相同的简单搜索。

3 个答案:

答案 0 :(得分:2)

我希望标准库中有一些东西,但是没有。因此,解决方案是逃避模式中的特殊字符,以便它们不执行其常用功能。

这是一般的想法:

  1. 获取模式字符串
  2. 将所有特殊字符替换为%后跟它(例如,%变为%%[变为%[
  3. 使用此作为替换文字的搜索模式

答案 1 :(得分:2)

这是一个用于文本替换的简单库函数:

function string.replace(text, old, new)
  local b,e = text:find(old,1,true)
  if b==nil then
     return text
  else
     return text:sub(1,b-1) .. new .. text:sub(e+1)
  end
end

此功能可以称为newtext = text:replace(old,new)

请注意,这只会替换oldtext第一次次出现。

答案 2 :(得分:2)

使用此功能可以转义搜索字符串中的所有魔术字符(仅限那些)。

function escape_magic(s)
  return (s:gsub('[%^%$%(%)%%%.%[%]%*%+%-%?]','%%%1'))
end