如何使用正则表达式查找具有不匹配功能的ThreadStarts?

时间:2014-01-10 20:29:22

标签: regex search lua notepad++

我正在使用Notepad ++,并希望使用“在文件中搜索”和“常规表达式”来查找某些Lua文件,否则我将无法获得错误。

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

function NameOfFunction()
--ToDoOrNotToDodo
end

我有这样的线程启动功能:

StartThread(NameOfFunction, value,value..)

现在,如果函数名拼写错误,或者函数出现错误,我只会得到一条消息,即使用了一些nil-value来尝试启动一个线程。没有床单,没有脚本文件。因此,正则表达式的救援。

现在我对正则表达式的想法就是这个

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

并且当且仅当没有相应的

时才使其成为匹配
  \s*function\s*[CaptureTheNameAndSave]\s*(

找到。

2 个答案:

答案 0 :(得分:4)

为什么不直接解决问题,而不是制作复杂(或不可能)的正则表达式?

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

这将使用一个包装器替换StartThread函数,该包装器会立即检查是否存在函数,如果为零则返回错误,从而为您提供良好的回溯。

答案 1 :(得分:0)

正如@ColonelThirtyTwo指出的,为什么正则表达式?创建一个函数,执行所需的所有检查并捕获线程中的错误:

function safeStartThread(func, arg1, arg2)
    -- check func isn't nil
    if func == nil then
        error('thread func cannot be nil')
        return
    end

    -- create wrapper to trap exceptions in func: 
    function trapper()
        local stat, errMsg = pcall(func, arg1, arg2)
        if stat then -- handle error
             print(errMsg) -- or whatever handling
        end
    end

    -- start thread:
    StartThread(trapper)
end

如果你想获得错误发生的行号等,你可以使用xpcall而不是pcall。