You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:09:24