\section{\module{fnmatch} ---
         \UNIX{} style filename pattern matching}

\declaremodule{standard}{fnmatch}
\modulesynopsis{\UNIX{} shell style filename pattern matching.}


This module provides support for \UNIX{} shell-style wildcards, which
are \emph{not} the same as regular expressions (which are documented
in the \refmodule{re}\refstmodindex{re} module).  The special
characters used in shell-style wildcards are:
\index{filenames!wildcard expansion}

\begin{list}{}{\leftmargin 0.5in \labelwidth 0.45in}
\item[\code{*}] matches everything
\item[\code{?}]	matches any single character
\item[\code{[}\var{seq}\code{]}] matches any character in \var{seq}
\item[\code{[!}\var{seq}\code{]}] matches any character not in \var{seq}
\end{list}

Note that the filename separator (\code{'/'} on \UNIX{}) is \emph{not}
special to this module.  See module \refmodule{glob}\refstmodindex{glob}
for pathname expansion (\refmodule{glob} uses \function{fnmatch()} to
match filename segments).


\begin{funcdesc}{fnmatch}{filename, pattern}
Test whether the \var{filename} string matches the \var{pattern}
string, returning true or false.  If the operating system is
case-insensitive, then both parameters will be normalized to all
lower- or upper-case before the comparision is performed.  If you
require a case-sensitive comparision regardless of whether that's
standard for your operating system, use \function{fnmatchcase()}
instead.
\end{funcdesc}

\begin{funcdesc}{fnmatchcase}{filename, pattern}
Test whether \var{filename} matches \var{pattern}, returning true or
false; the comparision is case-sensitive.
\end{funcdesc}


\begin{seealso}
  \seemodule{glob}{Shell-style path expansion}
\end{seealso}
