Tôi chắc chắn rằng tôi đang thiếu một cái gì đó rõ ràng ở đây, nhưng tôi không thể làm cho R để sử dụng biểu thức thông thường không tham lam:chuỗi không tham lam biểu thức chính quy phù hợp với
> library(stringr)
> str_match('xxx aaaab yyy', "a.*?b")
[,1]
[1,] "aaaab"
chức năng cơ sở xử theo cùng một cách:
> regexpr('a.*?b', 'xxx aaaab yyy')
[1] 5
attr(,"match.length")
[1] 5
attr(,"useBytes")
[1] TRUE
tôi mong chờ trận đấu là chỉ ab
theo bình luận 'tham lam' trong http://stat.ethz.ch/R-manual/R-devel/library/base/html/regex.html:
Theo sự lặp lại mặc định là tham lam, vì vậy số lần lặp lại tối đa có thể được sử dụng. Điều này có thể được thay đổi thành 'tối thiểu' bằng cách thêm? để định lượng. (Có thêm định lượng cho phép đối sánh gần đúng: xem tài liệu TRE.)
Ai đó có thể giải thích cho tôi điều gì đang xảy ra?
Cập nhật. gì điên là trong một số trường hợp khác mô hình phi tham lam như mong đợi:
> 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\">"
Cảm ơn @floder - Tôi hoàn toàn quên rằng nó luôn bắt đầu khớp từ bên trái. Mọi người đang thảo luận trong một thời gian dài: http://www.nntp.perl.org/group/perl.perl6.language.regex/2000/12/msg507.html –