--- title: "And/Or Detection" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{And/Or Detection} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` ```{r setup} library(strex) ``` ## How it works `strex` offers easy and/or versions of `stringr::str_detect()` via `str_detect_all()` and `str_detect_any()`. These are vectorized over `string` but not `pattern`. `stringr::fixed()` and `stringr::coll())` are handled correctly. Otherwise, `stringr` regular expressions are used. For `str_detect_all()`, a pattern argument `c("x", "y")` is converted to `"(?=.*x)(?=.*y)"`. For `str_detect_any()`, a pattern argument `c("x", "y")` is converted to `"x|y"`. ## Examples ```{r examples} str_detect_all("quick brown fox", c("x", "y", "z")) str_detect_all(c(".", "-"), ".") str_detect_all(c(".", "-"), coll(".")) str_detect_all(c(".", "-"), coll("."), negate = TRUE) str_detect_all(c(".", "-"), c(".", ":")) str_detect_all(c(".", "-"), coll(c(".", ":"))) str_detect_all("xyzabc", c("a", "c", "z")) str_detect_all(c("xyzabc", "abcxyz"), c(".b", "^x")) str_detect_any("quick brown fox", c("x", "y", "z")) str_detect_any(c(".", "-"), ".") str_detect_any(c(".", "-"), coll(".")) str_detect_any(c(".", "-"), coll("."), negate = TRUE) str_detect_any(c(".", "-"), c(".", ":")) str_detect_any(c(".", "-"), coll(c(".", ":"))) str_detect_any(c("xyzabc", "abcxyz"), c(".b", "^x")) ``` ## Performance Unless you're doing a huge amount of computation, it won't matter, but FWIW, it's faster to convert to regex using `str_escape()` rather than using `coll()`. ```{r performance} bench::mark( str_detect_all(rep("*", 1000), rep(str_escape("*"), 555)), str_detect_all(rep("*", 1000), coll(rep("*", 555))), min_iterations = 100 ) ```