【发布时间】:2013-05-16 01:03:54
【问题描述】:
我很确定我在这里遗漏了一些明显的东西,但我不能让 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
根据http://stat.ethz.ch/R-manual/R-devel/library/base/html/regex.html 中的“贪婪”评论,我希望匹配只是ab:
默认情况下重复是贪心的,所以使用最大可能的重复次数。 可以通过附加将其更改为“最小”?到量词。 (还有更多 允许近似匹配的量词:请参阅 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\">"
【问题讨论】: