[Rd] The regular expressions in compareVersion()

Duncan Murdoch murdoch.duncan at gmail.com
Fri Apr 25 01:20:02 CEST 2014


On 24/04/2014, 5:26 PM, Henrik Bengtsson wrote:
> 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
>

How does that cause problems?

Duncan Murdoch

> /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



More information about the R-devel mailing list