Regular Expression Question

Ken Ray kray at sonsothunder.com
Tue Jul 10 10:20:10 CDT 2007


On Tue, 10 Jul 2007 09:55:18 -0500, Len Morgan wrote:

> I need to find the last matching character offset of a string withing 
> another string.  The offset function only gives me the first one.  Is 
> there a function I'm missing (like "offset from end of string") or a 
> one or two liner I can use?
> 
> Example:
> 
> approved_by_code - I'm looking for the offset to the second "_" 
> character so the result should be 12 in this example.  It is also 
> possible that there will only be one "_" character in which case, 
> that is the offset I want.

Well, here you go - regex is normally "greedy" (meaning it find the 
last match in a string), but Rev's is "non-greedy", so it finds the 
first match. So if you did this:

on mouseUp
  if matchChunk("approved_by_code","(_)",tStart,tEnd) then
    put tStart,tEnd
  else
    put "not found"
  end if
end mouseUp

You'd get "9,9" in the message box - the first hit. So you need to 
reverse the "greediness" of the match using the (?U) directive. This 
one works to find the last occurrence:

on mouseUp
  if matchChunk("(?U)approved_by_code","(_)",tStart,tEnd) then
    put tStart,tEnd
  else
    put "not found"
  end if
end mouseUp

HTH,

Ken Ray
Sons of Thunder Software, Inc.
Email: kray at sonsothunder.com
Web Site: http://www.sonsothunder.com/



More information about the use-livecode mailing list