Tuesday, July 30, 2013

Re: Regexp help


On Jul 30, 2013 7:26 PM, "Erik Christiansen" <dvalin@internode.on.net> wrote:
>
> On 30.07.13 07:41, Ben Fritz wrote:
> > The OP specifically said that valid decimals are "in the form 1.0D0,
> > or more precisely \d\+\.\d\+D\d\+" so I didn't try stuff like "123."
> > or ".123".
>
> Wot ... just trust the problem specification? OK, the OP might be a
> mathematician or engineer, since fortran is mentioned, so you're
> probably right. But in years gone by, I sometimes wrote regexes for
> others in a technical department, and the original problem spec almost
> always had to be tightened, to exclude stuff which hadn't been thought of.
>
> > But possibly as in the other thread we need to account for negative numbers?
>
> If we change the test text to:
>
> 123 123.0 123. -456 0.123 .123 789
>
> then what we had:
>
> > > /\v\.@<!<\d+>\.@!
>
> also finds -456, but the cursor is on the 4, not the minus sign.
> If signed integers are also needed, we'd probably have to ditch the
> precondition, since /\v(-?|\.@<!)<\d+>\.@! introduces an ambiguity which
> defeats that alternative. (It's rotten regex construction.)
>
> This, though, finds "-456", rather than "456":
>
> \v(^|[ \t+-])<\d+>\.@!
>
> but again finds "123" " 789", as before. Maybe that's OK?

If you are speaking about numbers in programming language you should take care about expressions: there is no number -456 in expression 123-456. Also note that in programming languages negative numbers may exist only as optimization for minus being an unary operator in an expression -456 (it does not make any difference whether you treat -456 as unary minus applied to positive 456 or as a negative number; but the latter is faster). So I would not widen the request this way.

\v[[:alnum:].]@<!\d+[[:alnum:].]@!

should be fine.

> Erik
>
> --
> Remembering is for those who have forgotten.
>                             - Chinese proverb
>
> --
> --
> You received this message from the "vim_use" maillist.
> Do not top-post! Type your reply below the text you are replying to.
> For more information, visit http://www.vim.org/maillist.php
>
> ---
> 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 email to vim_use+unsubscribe@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>

--
--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
 
---
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 email to vim_use+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

No comments: