Unexpected match of regex

前端 未结 3 1921
执笔经年
执笔经年 2020-12-03 21:56

I expect the regex pattern ab{,2}c to match only with a followed by 0, 1 or 2 bs, followed by c.

It works that wa

3条回答
  •  佛祖请我去吃肉
    2020-12-03 22:09

    The behavior with {,2} is not expected, it is a bug. If you have a look at the TRE source code, tre_parse_bound method, you will see that the min variable value is set to -1 before the engine tries to initialize the minimum bound. It seems that the number of "repeats" in case the minimum value is missing in the quantifier is the number of maximum value + 1 (as if the repeat number equals max - min = max - (-1) = max+1).

    So, a{,} matches one occurrence of a. Same as a{, } or a{ , }. See R demo, only abc is matched with ab{,}c:

    grepl("ab{,}c", c("ac", "abc", "abbc", "abbbc", "abbbbc"))
    grepl("ab{, }c", c("ac", "abc", "abbc", "abbbc", "abbbbc"))
    grepl("ab{ ,   }c", c("ac", "abc", "abbc", "abbbc", "abbbbc"))
    ## => [1] FALSE  TRUE FALSE FALSE FALSE
    

提交回复
热议问题