Re: Regex arithmetic

```2017-08-05 23:27 GMT+03:00 porphyry5 <gl00...@gmail.com>:
> On Friday, August 4, 2017 at 10:03:16 AM UTC-7, porphyry5 wrote:
>> :h submatch( includes
>>         Example:
>>             :s/\d\+/\=submatch(0) + 1/
>>         This finds the first number in the line and adds one to it.
>>
>> Needing to increment several fields consisting of underscore and a single
>> digit (_\d) I modified the above along the lines of
>>
>>       s/_\(\d\)/\='_'.submatch(1) + 1/gc
>>
>> most of which merely replaced the entire field with '1'
>>
>> Thinking the problem might be a conflict between the types, string and
>> number, I tried
>>
>>     s/_\(\d\)/\="_".nr2char(submatch(1) + 1)/gc
>> then
>>     s/_\(\d\)/\="_".nr2char(submatch(1) + 31)/gc
>> and finally success with
>>     s/_\(\d\)/\="_".nr2char(submatch(1) + 49)/gc
>> which is limited to operations on just a single digit.
>>
>> So, is there a generally reliable method of performing arithmetic on numeric
>> fields embedded in a larger string pattern with :s? Thank you.
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> --
>>
>> Graham Lawrence
>
> Thank you,
>     s/_\(\d\)/\='_'.(submatch(1)+1)/g
> works perfectly, and I see what I was trying initially
>     s/_\(\d\)/\='_'.submatch(1)+1/g
> is actually equivalent to
>     s/_\d/\=submatch(0)+1/g
>
> In the meantime, I read :h substitute( and found
>     s/_\(\d\)/\=substitute(submatch(0),'\d',submatch(1)+1,'')/g
> which avoids the problem by making a secondary pattern selection of the
> number alone. But that's more typing, so I will pay attention to operator
> precedence in future.```
```
If you write using more then one language there is a good rule: do not
pay attention to operator precedence, just use parenthesis every time
you are not sure. I normally just assume that precedence is “[*/%] >
[-+] > binary comparison (>, <, >=, <=, ==, etc) > binary logical (not
bitwise) operators (&&, ||)” which is rather safe (though there are
languages where even these assumptions are not valid), and everything
else needs parenthesis.

>
> --
> --
> You received this message from the "vim_use" maillist.
>
> ---
> You received this message because you are subscribed to the Google Groups
> "vim_use" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> For more options, visit https://groups.google.com/d/optout.

--
--
You received this message from the "vim_use" maillist.