| //===-- RegularExpression.h -------------------------------------*- C++ -*-===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLDB_UTILITY_REGULAREXPRESSION_H |
| #define LLDB_UTILITY_REGULAREXPRESSION_H |
| |
| #include "llvm/ADT/StringRef.h" |
| #include "llvm/Support/Error.h" |
| #include "llvm/Support/Regex.h" |
| |
| namespace lldb_private { |
| |
| class RegularExpression { |
| public: |
| /// The default constructor that initializes the object state such that it |
| /// contains no compiled regular expression. |
| RegularExpression() = default; |
| |
| /// Constructor for a regular expression. |
| /// |
| /// Compile a regular expression using the supplied regular expression text. |
| /// The compiled regular expression lives in this object so that it can be |
| /// readily used for regular expression matches. Execute() can be called |
| /// after the regular expression is compiled. |
| /// |
| /// \param[in] string |
| /// An llvm::StringRef that represents the regular expression to compile. |
| // String is not referenced anymore after the object is constructed. |
| explicit RegularExpression(llvm::StringRef string); |
| |
| ~RegularExpression() = default; |
| |
| RegularExpression(const RegularExpression &rhs); |
| RegularExpression(RegularExpression &&rhs) = default; |
| |
| RegularExpression &operator=(RegularExpression &&rhs) = default; |
| RegularExpression &operator=(const RegularExpression &rhs) = default; |
| |
| /// Execute a regular expression match using the compiled regular expression |
| /// that is already in this object against the given \a string. If any parens |
| /// are used for regular expression matches. |
| /// |
| /// \param[in] string |
| /// The string to match against the compile regular expression. |
| /// |
| /// \param[out] matches |
| /// A pointer to a SmallVector to hold the matches. |
| /// |
| /// \return |
| /// true if \a string matches the compiled regular expression, false |
| /// otherwise incl. the case regular exression failed to compile. |
| bool Execute(llvm::StringRef string, |
| llvm::SmallVectorImpl<llvm::StringRef> *matches = nullptr) const; |
| |
| /// Access the regular expression text. |
| /// |
| /// \return |
| /// The NULL terminated C string that was used to compile the |
| /// current regular expression |
| llvm::StringRef GetText() const; |
| |
| /// Test if this object contains a valid regular expression. |
| /// |
| /// \return |
| /// true if the regular expression compiled and is ready for execution, |
| /// false otherwise. |
| bool IsValid() const; |
| |
| /// Return an error if the regular expression failed to compile. |
| /// |
| /// \return |
| /// A string error if the regular expression failed to compile, success |
| /// otherwise. |
| llvm::Error GetError() const; |
| |
| bool operator==(const RegularExpression &rhs) const { |
| return GetText() == rhs.GetText(); |
| } |
| |
| private: |
| /// A copy of the original regular expression text. |
| std::string m_regex_text; |
| /// The compiled regular expression. |
| mutable llvm::Regex m_regex; |
| }; |
| |
| } // namespace lldb_private |
| |
| #endif // LLDB_UTILITY_REGULAREXPRESSION_H |