I have a string that contains something like this:
##### abc 'foo'
/path/to/filename:1
##### abc 'bar'
/path/to/filename:1
The string can potentially be very long (say, 50 lines) and doesn't change often.
I would like to fetch the last occurrence of text in between the single-quotes (bar
in this example). This is similar to someone else's Python problem (except the answer there doesn't work for me in Lua, as seen far below).
I could parse each line, and put the results into an array, and then just take the last element of the array, but that doesn't seem elegant to me:
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])
I'm interested in using Lua string patterns to search the string from the end. The pattern I tried below starts from the beginning instead of the end:
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)
This yields:
input:12: expected "bar" but saw "foo"
What string pattern specifies the "reverse search" I'm looking for?