Difference between revisions of "SubStringLastIndex"
Jump to navigation
Jump to search
m (More obvious this way (avoids the negative index issue), since we evaluate from right to left, the recursion should happen before the parameters for the add are pushed onto the stack.) |
Omei Qunhua (talk | contribs) (Sasun's original version worked. The untested modification didn't. Added a 3rd tested solution.) |
||
Line 34: | Line 34: | ||
'''Code:''' | '''Code:''' | ||
Alternative implementation - may be faster, | Alternative implementation - may be faster, tested. | ||
''(warning: uses recursion, high potential for LSL stack heap collision when processing large and/or highly repetitive strings)'' | ''(warning: uses recursion, high potential for LSL stack heap collision when processing large and/or highly repetitive strings)'' | ||
Line 42: | Line 42: | ||
return 0; | return 0; | ||
integer index = llSubStringIndex(vStrSrc, vStrTst); | integer index = llSubStringIndex(vStrSrc, vStrTst); | ||
if (index | integer index2; | ||
if (index != -1) //found, look again | |||
index2 = uSubStringLastIndex(llGetSubString(vStrSrc, index + 1, -1), vStrTst) + 1; | |||
return index + index2; | |||
} | } | ||
/*// Contributed Freely to the Public Domain without limitation by Sasun Steinbeck. //*/</lsl> | /*// Contributed Freely to the Public Domain without limitation by Sasun Steinbeck. //*/</lsl> | ||
Third solution, tested | |||
<lsl> | |||
integer uSubStringLastIndex(string hay, string pin) | |||
{ | |||
integer index2 = -1; | |||
integer index; | |||
if (pin == "") | |||
return 0; | |||
while (~index) | |||
{ | |||
index = llSubStringIndex( llGetSubString(hay, ++index2, -1), pin); | |||
index2 += index; | |||
} | |||
return index2; | |||
} | |||
</lsl> | |||
}} | }} | ||
Revision as of 08:59, 22 May 2014
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials | User-Defined Functions | Void's User Page |
User-Defined Function: integer uSubStringLastIndex( string vStrSrc, string vStrTst );
Returns a integer that is the positive index of the last vStrTst within vStrSrc
- vStrSrc: source string to check
- vStrTst: string to look for
if vStrTst is not found in vStrSrc -1 is returned.
the index of the first character is 0
Code:
- LSO: 182 bytes
- MONO: 1024 bytes
<lsl>integer uSubStringLastIndex( string vStrSrc, string vStrTst ){
integer vIdxFnd = llStringLength( vStrSrc ) - llStringLength( vStrTst ) - llStringLength( llList2String( llParseStringKeepNulls( vStrSrc, (list)vStrTst, [] ), 0xFFFFFFFF ) //-- (-1) );return (vIdxFnd
Caveats
- Performs a literal match (case sensitive).
- Wildcards and RegEx are not supported.
- Attempting to match an empty string ("") will return 0 instead of -1.
Notes
- This function is operates exactly like llSubStringIndex (including caveats), from the opposite end of the string.