Lua中查找含空格子串:Joy-Con (R)及任意子串实现方法
嘿,我来帮你搞定这两个Lua字符串查找的问题,结合你给的Love2D代码示例一步步说:
问题1:如何在Lua的joysticks字符串变量中查找子串
Joy-Con (R)? Lua的字符串find方法默认会把搜索内容当作模式匹配表达式,而Joy-Con (R)里的括号属于模式匹配的特殊字符(用来做分组匹配),直接搜索会出问题。正确的做法是开启字面量匹配模式,给find方法加上第三个参数plain=true:
-- 查找Joy-Con (R)子串 local isFound = joysticks:find("Joy-Con (R)", 1, true) if isFound then print("成功找到Joy-Con (R)") else print("没找到Joy-Con (R)") end
这里的1表示从字符串的第1个字符开始搜索,plain=true告诉Lua不要解析搜索内容里的特殊符号,只做纯文本匹配,这样括号就会被当作普通字符处理啦。
问题2:如何在joysticks变量中查找任意子串?
分两种场景来处理:
- 字面量匹配(精确查找):和上面的逻辑一样,不管子串有没有特殊字符,都用
find+plain=true来保证精准匹配。比如要找"Pro Controller":
local target = "Pro Controller" -- 从第1位开始字面量查找 local startIndex = joysticks:find(target, 1, true) if startIndex then print(string.format("找到子串啦,起始位置在第%d位", startIndex)) else print("没找到这个子串哦") end
- 模式匹配(模糊/灵活查找):如果需要更灵活的搜索(比如匹配所有带
Joy-Con的手柄名称),可以去掉plain=true,利用Lua的模式匹配语法。比如查找所有包含Joy-Con的片段:
-- 匹配"Joy-Con"后跟任意标点+字母的模式 local pattern = "Joy-Con%p+%w+" local startPos, endPos = joysticks:find(pattern) if startPos then -- 截取并打印匹配到的子串 print("找到匹配的子串:" .. joysticks:sub(startPos, endPos)) end
另外,结合你给出的Love2D代码,我给你优化一下:原来的love.joystickadded函数里,joystick:getName()返回的手柄名称可能包含括号这类特殊字符,不加plain=true会导致匹配失败,修改后的代码更稳妥:
function love.load() joysticks = "Joy-Con (R) Joy-Con (L)" end function love.joystickadded( joystick ) -- 开启字面量匹配,避免手柄名称里的特殊字符干扰 if not joysticks:find(joystick:getName(), 1, true) then print("not supported") end end
内容的提问来源于stack exchange,提问作者dylan
相关产品推荐
相关产品推荐

