如何使用正则表达式查找未匹配的ThreadStart函数?

我正在使用Notepad ++,并希望使用文件中的搜索和正则表达式,在一些Lua文件中查找我无法通过其他方式找到的错误。

在我的文件中,我有像这样的功能:

`` ` function NameOfFunction()

  • ToDoOrNotToDodo end

```

我有Thread Starting函数调用,如下所示:

`` ` StartThread(NameOfFunction,value,value ..)

`` `

现在,如果函数名称拼写错误,或者函数其他方面引发错误,则仅得到消息,即使用某些nil值尝试启动线程。没有行号,没有脚本文件。因此,正则表达式来解救。

现在我的正则表达式的想法是这样的

`` ` \ s * StartThread \(\ s * [CaptureTheNameAndSave],

`` `

只有在没有相应的情况下才将其匹配

`` ` \ s * function \ s * [CaptureTheNameAndSave] \ s *(

`` `

发现。

点赞
用户646619
用户646619
<!--将下面翻译成中文并且保留原本的 markdown 格式,-->

<!--为什么不直接解决问题呢,而是要制作一个复杂(或不可能)的正则表达式?-->
而不是制作一个复杂(或不可能)的正则表达式,为什么不直接解决问题呢?

local oldStartThread = StartThread function StartThread(func, ...) assert(func) return oldStartThread(func, ...) end


这将使用包装器替换StartThread函数,该包装器立即检查是否存在函数,并在其为nil时出错,从而为您提供良好的异常跟踪。 
2014-01-10 20:45:55
用户869951
用户869951

如@ColonelThirtyTwo所指出的那样,为什么要使用 regex?创建一个函数,它可以执行你想要的所有检查,并在线程中捕获错误:

function safeStartThread(func, arg1, arg2)
    -- 检查 func 不是空值
    if func == nil then
        error('线程函数不能为空')
        return
    end

    -- 创建包装器以捕获 func 中的异常:
    function trapper()
        local stat, errMsg = pcall(func, arg1, arg2)
        if stat then -- 处理错误
             print(errMsg) -- 或者其他处理方法
        end
    end

    -- 启动线程:
    StartThread(trapper)
end

如果你想要获取错误发生的行号等信息,可以使用 xpcall 替代 pcall。

2014-01-11 04:56:36