이 정규 표현식은 거의 모든 유효한 유형의 함수 (이진 연산자, 할당 함수)와 함수 이름의 모든 유효한 문자를 포착한다고 생각하지만 가장자리가 빠졌을 수 있습니다.
# lines <- readLines("functions.R")
lines <- c(
"`%in%` <- function",
"foo <- function",
"foo2bar <- function",
"`%in%`<-function",
"foo<-function",
".foo <-function",
"foo2bar<-function",
"`foo2bar<-`<-function",
"`foo3bar<-`=function",
"`foo4bar<-` = function",
"` d d` <- function",
"lapply(x, function)"
)
grep("^`?%?[.a-zA-Z][._a-zA-Z0-9 ]+%?(<-`)?`?\\s*(<-|=)\\s*function", lines)
#> [1] 1 2 3 4 5 6 7 8 9 10
funs <- grep("^`?%?[.a-zA-Z][._a-zA-Z0-9 ]+%?(<-`)?`?\\s*(<-|=)\\s*function", lines, value = TRUE)
gsub("^(`?%?[.a-zA-Z][._a-zA-Z0-9 ]+%?(<-`)?`?).*", "\\1", funs)
#> [1] "`%in%`" "foo " "foo2bar " "`%in%`" "foo"
#> [6] ".foo " "foo2bar" "`foo2bar<-`" "`foo3bar<-`" "`foo4bar<-`"
source()
않지만이 오래된 스레드 가 관심이있을 수 있습니다.