3
我有一個包含類似這樣的字符串:在Lua中反向string.find()或string.gmatch?
##### abc 'foo'
/path/to/filename:1
##### abc 'bar'
/path/to/filename:1
字符串可能會非常長(比如,50線)和不經常更改。
我想獲取單引號(本例中爲bar
)之間的最後一次出現的文本。這與其他人的Python problem類似(除了在Lua中對我無效的答案,如下所示)。
我可以分析每一行,並把結果放到一個數組,然後只取數組的最後一個元素,但是這似乎並沒有優雅的對我說:
local text = [[ ##### abc 'foo' /path/to/filename:1 ##### abc 'bar' /path/to/filename:1 ]] local arr = {} local pattern = "abc '([^']+)'" for s in text:gmatch(pattern) do table.insert(arr, s) end print('last:', arr[#arr])
我感興趣使用Lua字符串模式從結尾搜索字符串。下面我嘗試的模式開始從一開始就結束的,而不是:
local text = [[ ##### abc 'foo' /path/to/filename:1 ##### abc 'bar' /path/to/filename:1 ]] -- FIXME: pattern searches from beginning local pattern = "abc '([^']+)'.*$" local s = text:gmatch(pattern)() assert(s == 'bar', 'expected "bar" but saw "'..s..'"') print('last:', s)
這產生了:
input:12: expected "bar" but saw "foo"
什麼字符串模式指定「反向搜索」我在找什麼?