\HeaderA{glob2rx}{Change Wildcard or Globbing Pattern into Regular Expression}{glob2rx}
\keyword{file}{glob2rx}
\keyword{character}{glob2rx}
\keyword{utilities}{glob2rx}
\begin{Description}\relax
Change \emph{wildcard} aka \emph{globbing} patterns into the
corresponding regular expressions (\code{\LinkA{regexp}{regexp}}).
\end{Description}
\begin{Usage}
\begin{verbatim}
glob2rx(pattern, trim.head = FALSE, trim.tail = TRUE)
\end{verbatim}
\end{Usage}
\begin{Arguments}
\begin{ldescription}
\item[\code{pattern}] character vector
\item[\code{trim.head}] logical specifying if leading \code{"\textasciicircum{}.*"} should be
trimmed from the result.
\item[\code{trim.tail}] logical specifying if trailing \code{".*\$"} should be
trimmed from the result.
\end{ldescription}
\end{Arguments}
\begin{Details}\relax
This takes a wildcard as used by most shells and returns an equivalent
regular expression.  \code{?} is mapped to \code{.} (match a single
character), \code{*} to \code{.*} (match any string, including an
empty one), and the pattern is anchored (it must start at the
beginning and end at the end).  Optionally, the resulting regexp is
simplified.

Note that now even \code{(}, \code{[} and \code{\{} can be used
in \code{pattern}, but \code{glob2rx()} may not work correctly with
arbitrary characters in \code{pattern}.
\end{Details}
\begin{Value}
A character vector of the same length as the input \code{pattern}
where each wildcard is translated to the corresponding
regular expression.
\end{Value}
\begin{Author}\relax
Martin Maechler, Unix/sed based version, 1991; current: 2004
\end{Author}
\begin{SeeAlso}\relax
\code{\LinkA{regexp}{regexp}} about regular expression,
\code{\LinkA{sub}{sub}}, etc about substitutions using regexps.
\end{SeeAlso}
\begin{Examples}
\begin{ExampleCode}
stopifnot(glob2rx("abc.*") == "^abc\\.",
          glob2rx("a?b.*") == "^a.b\\.",
          glob2rx("a?b.*", trim.tail=FALSE) == "^a.b\\..*$",
          glob2rx("*.doc") == "^.*\\.doc$",
          glob2rx("*.doc", trim.head=TRUE) == "\\.doc$",
          glob2rx("*.t*")  == "^.*\\.t",
          glob2rx("*.t??") == "^.*\\.t..$",
          glob2rx("*[*")  == "^.*\\["
)
\end{ExampleCode}
\end{Examples}

