title: Reverse string.find() or string.gmatch in Lua?
body: <p>I have a string that contains something like this:</p>
  
  <pre><code>##### abc 'foo'
  /path/to/filename:1
  ##### abc 'bar'
  /path/to/filename:1
  </code></pre>
  
  <p>The string can potentially be very long (say, 50 lines) and doesn't change often.</p>
  
  <p>I would like to fetch the last occurrence of text in between the single-quotes (<code>bar</code> in this example). This is similar to someone else's Python <a href="https://stackoverflow.com/questions/2802168/find-last-match-with-python-regular-expression">problem</a> (except the answer there doesn't work for me in Lua, as seen far below).</p>
  
  <p>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:</p>
  
  <pre>
  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])
  </pre>
  
  <p>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:</p>
  
  <pre>
  local text = [[
      ##### abc 'foo'
      /path/to/filename:1
      ##### abc 'bar'
      /path/to/filename:1
  ]]
  
  <b>-- FIXME: pattern searches from beginning</b>
  local pattern = "abc '([^']+)'.*$"
  
  local s = text:gmatch(pattern)()
  assert(s == 'bar', 'expected "bar" but saw "'..s..'"')
  print('last:', s)
  </pre>
  
  <p>This yields:</p>
  
  <pre>
  input:12: expected "bar" but saw "foo"
  </pre>
  
  <p><strong>What string pattern specifies the "reverse search" I'm looking for?</strong></p>