From hb at biostat.ucsf.edu  Thu Apr 24 23:26:53 2014
From: hb at biostat.ucsf.edu (Henrik Bengtsson)
Date: Thu, 24 Apr 2014 14:26:53 -0700
Subject: [Rd] The regular expressions in compareVersion()
In-Reply-To: <5359771E.8040507@gmail.com>
References: <CANROs4dE+EM92_EoD9E1aeS-1B1wmYiV2vyWsSOwx3Xn6ydV1A@mail.gmail.com>
	<5359771E.8040507@gmail.com>
Message-ID: <CAFDcVCR2JN9EoXwMFpE9RbXYiRN=UyJH_-RgFAKO6_a78uf1CA@mail.gmail.com>

On Thu, Apr 24, 2014 at 1:42 PM, Duncan Murdoch
<murdoch.duncan at gmail.com> wrote:
> On 24/04/2014, 1:11 PM, Yihui Xie wrote:
>>
>> Hi,
>>
>> I guess the backslash should not be used as the separator for
>> strsplit() in compareVersion(), because the period in [.] is no longer
>> a metacharacter (no need to "escape" it using a backslash):
>>
>> https://github.com/wch/r-source/blob/trunk/src/library/utils/R/packages.R#L866-L867
>>
>>> compareVersion
>>
>> function (a, b)
>> {
>> ....
>>      a <- as.integer(strsplit(a, "[\\.-]")[[1L]])
>>      b <- as.integer(strsplit(b, "[\\.-]")[[1L]])
>> ....
>> <environment: namespace:utils>
>
>
> Could you post an example where this causes trouble, or are you just
> suggesting this as a way to make the source a little cleaner?

Maybe it's already clear, but [\\.] is the set for the two symbols '\'
and '.', not '.' alone.  For example, I would expect an error below:

> compareVersion("3.14-59.26", "3.14-59\\26")
[1] 0

/Henrik

>
>
>>
>> A similar regular expression problem also exists in the Sweave syntax
>> (for \Sexpr{}), and I have reported it once. It was fixed but the fix
>> was immediately reverted for some reason:
>>
>> https://github.com/wch/r-source/commit/52b0a46e15136a7f9e4777e9960fdda6d84880c0
>
>
> A link to your report would be more useful, if it included an example where
> the bad regexp causes trouble.
>
> Duncan Murdoch
>
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



[Rd] The regular expressions in compareVersion()
Henrik Bengtsson