Я ожидаю, что шаблон регулярного выражения ab{,2}c
будет соответствовать только с a
, за которым следуют 0, 1 или 2 b
s, а затем c
.
Он работает именно так на многих языках, например Python. Однако в R:
grepl("ab{,2}c", c("ac", "abc", "abbc", "abbbc", "abbbbc"))
# [1] TRUE TRUE TRUE TRUE FALSE
Я удивлен 4-м TRUE
. В ?regex
я могу читать:
{n,m}
Предыдущий элемент сопоставляется не менееn
раз, но не более чемm
раз.
Итак, я согласен, что {,2}
должен быть записан {0,2}
как допустимый шаблон (в отличие от Python, где явно указано состояние docs, опускающее n
, указывает нижнюю границу нуля).
Но при использовании {,2}
следует выбросить ошибку, а не возвращать вводящие в заблуждение соответствия! Я что-то пропустил или должен быть сообщен как ошибка?