diff options
author | Torok Edwin <edwintorok@gmail.com> | 2009-08-30 08:24:09 +0000 |
---|---|---|
committer | Torok Edwin <edwintorok@gmail.com> | 2009-08-30 08:24:09 +0000 |
commit | ce0c81e7dd321e9f94f628daa5528f56cab0ab88 (patch) | |
tree | 29b76548d9f780040e5ef64de07c626114d28fa5 /include/llvm/Support/Regex.h | |
parent | 743810620742c92be90a30c7fc7d5e6631baff1f (diff) |
Add regular expression matching support, based on OpenBSD regexec()/regcomp()
implementation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80493 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Support/Regex.h')
-rw-r--r-- | include/llvm/Support/Regex.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/include/llvm/Support/Regex.h b/include/llvm/Support/Regex.h new file mode 100644 index 0000000000..31fd3ccefb --- /dev/null +++ b/include/llvm/Support/Regex.h @@ -0,0 +1,64 @@ +//===-- Regex.h - Regular Expression matcher implementation -*- C++ -*-----===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file implements a POSIX regular expression matcher. +// +//===----------------------------------------------------------------------===// + +#include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/StringRef.h" + +struct llvm_regex; +namespace llvm { + class Regex { + public: + enum { + /// Compile with support for subgroup matches, this is just to make + /// constructs like Regex("...", 0) more readable as Regex("...", Sub). + Sub=0, + /// Compile for matching that ignores upper/lower case distinctions. + IgnoreCase=1, + /// Compile for matching that need only report success or failure, + /// not what was matched. + NoSub=2, + /// Compile for newline-sensitive matching. With this flag '[^' bracket + /// expressions and '.' never match newline. A ^ anchor matches the + /// null string after any newline in the string in addition to its normal + /// function, and the $ anchor matches the null string before any + /// newline in the string in addition to its normal function. + Newline=4 + }; + + /// Compiles the given POSIX Extended Regular Expression \arg Regex. + /// This implementation supports regexes and matching strings with embedded + /// NUL characters. + Regex(const StringRef &Regex, unsigned Flags=NoSub); + ~Regex(); + + /// isValid - returns the error encountered during regex compilation, or + /// matching, if any. + bool isValid(std::string &Error); + + /// matches - Match the regex against a given \arg String. + /// + /// \param Matches - If given, on a succesful match this will be filled in + /// with references to the matched group expressions (inside \arg String), + /// the first group is always the entire pattern. + /// By default the regex is compiled with NoSub, which disables support for + /// Matches. + /// For this feature to be enabled you must construct the regex using + /// Regex("...", Regex::Sub) constructor. + + bool match(const StringRef &String, SmallVectorImpl<StringRef> *Matches=0); + private: + struct llvm_regex *preg; + int error; + bool sub; + }; +} |