Я уверен, что здесь отсутствует что-то очевидное, но я не могу заставить R использовать не жадные регулярные выражения:
> library(stringr)
> str_match('xxx aaaab yyy', "a.*?b")
[,1]
[1,] "aaaab"
Базовые функции ведут себя одинаково:
> regexpr('a.*?b', 'xxx aaaab yyy')
[1] 5
attr(,"match.length")
[1] 5
attr(,"useBytes")
[1] TRUE
Я ожидаю, что матч будет просто ab
в соответствии с "жадным" комментарием в http://stat.ethz.ch/R-manual/R-devel/library/base/html/regex.html:
По умолчанию повторение является жадным, поэтому используется максимально возможное количество повторов. Это может быть изменено на "минимальное путем добавления? к квантору. (Есть еще квантификаторы, которые позволяют приблизительное сопоставление: см. документацию TRE.)
Может кто-нибудь, пожалуйста, объясните мне, что происходит?
Обновление. Что сумасшедшее в том, что в некоторых других случаях нежелательные шаблоны ведут себя так, как ожидалось:
> str_match('xxx <a href="abc">link</a> yyy <h1>Header</h1>', '<a.*>')
[,1]
[1,] "<a href=\"abc\">link</a> yyy <h1>Header</h1>"
> str_match('xxx <a href="abc">link</a> yyy <h1>Header</h1>', '<a.*?>')
[,1]
[1,] "<a href=\"abc\">"