Strfindt

strfindt - by Mikk -

A thin wrapper for strfind that returns the results as a table, allowing it to be used in e.g. if clauses while capturing subexpressions.

nBeginPos, nEndPos = &lt;PREFIX&gt;_strfindt(tableCaptures, strHaystack, strRegex, nStartPos, boolPlain)

Arguments

 * (tableCaptures, strHaystack, strRegex, nStartPos, boolPlain)


 * tableCaptures : output Table - captured subexpressions

(identical to strfind after this point)
 * strHaystack : String - the string to perform the search in
 * strRegex : String - the regular expression (search pattern)
 * nStartPos : Number - the position to begin the search on (nil = from the beginning)
 * boolPlain : Boolean - set to true to not use regexes (which defeats the whole purpose of this wrapper)

Returns

 * nBegin, nEnd


 * nBeginPos : Number - beginning of match (1-based) or nil for no match
 * nEndPos: String - end position of match

Example
local results = {}; if(&lt;PREFIX&gt;_strfindt(results, '&lt;b>&lt;a href="wowpedia.org">Wowpedia&lt;/a>', '&lt;a [^>]*%fhref="([^"]*)"[^>]>([^<])+&lt;/a>') then    print results[2] . " lives at " . results[1];  end

Result
Wowpedia lives at wowpedia.org

Code
-- Returns: nBeginPos, nEndPos. Captured expressions go in tOut function &lt;PREFIX&gt;_strfindt(tOut, strFind, strRegex, nStart, bPlain) local a = { string.find(strFind, strRegex, nStart, bPlain) }; while(getn(tOut)>0) do tremove(tOut,1); end for _,v in a do     tinsert(tOut, v); end return a[1], a[2]; end