lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


On Sun, Mar 2, 2014 at 11:08 AM, Thiago L. <fakedme@gmail.com> wrote:
>
> On 02/03/2014 15:56, Coroutines wrote:
>>
>> On Sun, Mar 2, 2014 at 12:18 AM, Dirk Laurie <dirk.laurie@gmail.com>
>> wrote:
>>>
>>> 2014-03-02 9:06 GMT+02:00 Coroutines <coroutines@gmail.com>:
>>>
>>>> This does not:
>>>>
>>>>> = string.find('cat', 'cat', -31, true)
>>>>
>>>> 1 3
>>>> I expect it to match the string at the index I passed to it, not
>>>> silently reposition the start at a valid index (1).
>>>
>>> All the string functions do that. It is documented under string.sub.
>>>
>>> | If, after the translation of negative indices, i is less than 1, it
>>> is corrected to 1.
>>>
>> Yes :-)  I believe it makes sense for string.sub(), as you would want
>> the valid portion of the string from (let's say) -31 to 5.  This would
>> be readjusted to only "sub out" indexes 1 through 5.  I do not believe
>> it makes sense for string.find()/string.match() -- as false-positives
>> are possible when I tell it to match somewhere clearly before the
>> string (in a place it doesn't exist).
>>
> I'm not sure if you know how matching works, but if you want to match at the
> start of a string, you have to use string.match("cat","^cat"). The only bug
> I see (on Lua 5.1 if that matters) is when using negative indices and
> matching at the start of a string...
>

I was attempting to do a plain-match from index -31 (an index I said I
cannot predict, -31 is just an example).  I do understand how to use
the pattern matching facilities, I am saying that if the index is
before the string it should not be corrected to be 1, it should not be
silently corrected to be a valid index.  If the starting index is
after the string nil is returned because it cannot match a string that
doesn't exist at that point.  The same should be true if the index is
before the string.

As I was telling Mr. Laurie, string.sub() is fine but I very much
disagree with string.find()/string.match() moving the starting index
up.

The problem is still there in 5.2:
http://www.lua.org/source/5.2/lstrlib.c.html#str_find_aux