仅替换LUA string.gsub()中的整词,忽略冒号等神奇字符

仅替换LUA string.gsub()中的整词,忽略冒号等神奇字符,lua,Lua,我在试图替换一个句子中的所有单词时遇到了一个问题。我试过几种方法,但效果不太好。我希望我能在这里得到一些帮助 因此,我使用了以下文章中的代码: 下面是我用来测试这个的演示代码 local source = '|Hplayer:YarnBarn-SomeServer:374:WHISPER:YARNBARN-SOMESERVER[113:|cFF342345YarnBarn|r]|h whispers: this is a test YarnBarn YarnBarnME testing fo

我在试图替换一个句子中的所有单词时遇到了一个问题。我试过几种方法,但效果不太好。我希望我能在这里得到一些帮助

因此,我使用了以下文章中的代码:

下面是我用来测试这个的演示代码

local source  = '|Hplayer:YarnBarn-SomeServer:374:WHISPER:YARNBARN-SOMESERVER[113:|cFF342345YarnBarn|r]|h whispers: this is a test YarnBarn YarnBarnME testing for % YarnBarn finally :YarnBarn# YarnBarn'
local find    = 'YarnBarn'
local replace = 'NOODLE'

print(replacetext(source, find, replace, true ))
我得到的输出如下:

|Hplayer:NOODLE-SomeServer:374:WHISPER:YARNBARN-SOMESERVER[113:|cFF342345NOODLE|r]|h whispers: this is a test NOODLE YarnBarnME testing for % NOODLE finally :NOODLE# NOODLE
然而,上面的说法是不正确的,因为它将单词与前面的冒号相匹配,并且显然考虑了特殊字符或魔法字符

正确的返回应该如下所示:

|Hplayer:YarnBarn-SomeServer:374:WHISPER:YARNBARN-SOMESERVER[113:|cFF342345YarnBarn|r]|h whispers: this is a test NOODLE YarnBarnME testing for % NOODLE finally :YarnBarn# NOODLE
我试着让它在单词的前面或后面完全没有任何内容来替换整个单词。这包括特殊字符或冒号。这就是为什么在应该正确输出的内容上,您会注意到只有YarnBarn的独立单词被转换为面条


我不想把这个句子切碎,也不想只看一部分。我真的需要它来解析整个句子并替换整个单词。我试过几种不同的方法,但似乎无法使它正常工作。任何帮助都将不胜感激

@EgorSkriptunoff发布了这个解决方案

function replacetext(source, find, replace, wholeword)
  if wholeword then
    find = "%f[^%z%s]"..find.."%f[%z%s]"
  end
  return (source:gsub(find,replace))
end

@EgorSkriptunoff发布了这个解决方案

function replacetext(source, find, replace, wholeword)
  if wholeword then
    find = "%f[^%z%s]"..find.."%f[%z%s]"
  end
  return (source:gsub(find,replace))
end

find=“%f[^%z%s]”。查找..“%f[%z%s]”
@EgorSkriptunoff,这很有效!你能解释一下为什么它会起作用吗?我正在尝试学习,显然%z与字节0匹配。我假设你在检查单词前后的字节0?我甚至不知道这是如何正常工作的。Lua模式的工作方式就像任何字符串都是以字节0作为前缀和附加的。@EgorSkriptunoff啊!这完全可以解释为什么要检查%z。这是很好的未来知道谢谢@EgorSkriptunoff如果可能的话,你能把你的提交作为下面的答案吗?这样我就可以把它标为公认的答案。谢谢<代码>查找=“%f[^%z%s]”。查找..“%f[%z%s]”@EgorSkriptunoff,这很有效!你能解释一下为什么它会起作用吗?我正在尝试学习,显然%z与字节0匹配。我假设你在检查单词前后的字节0?我甚至不知道这是如何正常工作的。Lua模式的工作方式就像任何字符串都是以字节0作为前缀和附加的。@EgorSkriptunoff啊!这完全可以解释为什么要检查%z。这是很好的未来知道谢谢@EgorSkriptunoff如果可能的话,你能把你的提交作为下面的答案吗?这样我就可以把它标为公认的答案。谢谢