String Lua边界模式匹配(全词搜索)

String Lua边界模式匹配(全词搜索),string,lua,gsub,lua-patterns,String,Lua,Gsub,Lua Patterns,有人能帮我吗 s_test = "this is a test string this is a test string " function String.Wholefind(Search_string, Word) _, F_result = string.gsub(Search_string, '%f[%a]'..Word..'%f[%A]',"") return F_result end A_test = String.Wholefind(s_test,"string") out

有人能帮我吗

s_test = "this is a test string this is a test string "

function String.Wholefind(Search_string, Word)
 _, F_result = string.gsub(Search_string, '%f[%a]'..Word..'%f[%A]',"")
 return F_result
end

A_test = String.Wholefind(s_test,"string")
output: A_test = 2
所以frontier模式发现整个单词没有问题,gsub计算整个单词没有问题,但是如果搜索字符串有数字呢

s_test = " 123test 123test 123"
B_test = String.Wholefind(s_test,"123test")
output: B_test = 0 

如果数字不在搜索字符串的开始或结束处,则似乎可以使用。您的模式不匹配,因为您正在尝试执行不可能的操作

包含变量值后,模式如下所示:
%f[%a]123test%f[%a]
。这意味着:

  • %f[%a]-查找从非字母到字母的转换
  • 123-在从非字母转换为字母后的位置找到123。这本身在逻辑上是不可能的,因为当一个非字母跟随它时,你不能匹配到一个字母的转换
  • 您的模式(如所写)不适用于任何以非字母开头或结尾的单词


    如果您需要搜索包含字母和数字的片段,那么您的模式需要更改为类似于
    '%f[%S]'…Word..'%f[%S]'

    尝试
    %w
    %w
    而不是
    %a
    %a
    。哈哈,问题是模式'%f[%a]'…Word..'%f[%a]“如果删除$a$a或添加了数字%d,则似乎不起作用,因此我一直在寻找一种解决方案,以使这项工作与混合strings@lhf,则%w的工作原理与%a的工作原理相同,只是很好,但与数字无关谢谢,这很有效,您不会碰巧知道如何测试“word”是否以数字开头或结尾,因此%f[%a]123测试%f[%a]和“%f”[%S]'…Word..%f[%S]'可以放在if语句中???@Mick,您需要检查第一个和最后一个字符。请尝试
    (Word:find('%d',1)或Word:find('%d',1))和'%f[%S]'…Word..%f[%S]'或'%f[%a]123test%f[%a]。
    。[%a]和[%S]之间的意义是什么,只是试图理解这一点,这样我就可以在这里创建一个“万无一失”的函数,它可以处理任何字符串segment@Mick,%S将检测从空格到非空格的切换(当“工作”从数字或字母开始时,这可能是您想要的)。或者,您可以按照lhf的建议尝试%w和%w。