diff --git a/src/tokenizer.cpp b/src/tokenizer.cpp index 00f0b0b761..06c0c45bf7 100644 --- a/src/tokenizer.cpp +++ b/src/tokenizer.cpp @@ -99,6 +99,8 @@ void Tokenizer::reset() } /*! Search the text to be processed for a sub-string. + * + * This method does a generic substring match. * * \param str string to be searched for * \return true if string was found, false if not */ @@ -107,6 +109,20 @@ bool Tokenizer::contains(const std::string &str) const return text.find(str) != std::string::npos; } +/*! Search the text to be processed for regular expression match. + * +\verbatim embed:rst +This method matches the current string against a regular expression using +the :cpp:func:`utils::strmatch() ` function. +\endverbatim + * + * \param str regular expression to be matched against + * \return true if string was found, false if not */ +bool Tokenizer::matches(const std::string &str) const +{ + return utils::strmatch(text, str); +} + /*! Skip over a given number of tokens * * \param n number of tokens to skip over */ @@ -233,6 +249,8 @@ bool ValueTokenizer::has_next() const } /*! Search the text to be processed for a sub-string. + * + * This method does a generic substring match. * * \param value string with value to be searched for * \return true if string was found, false if not */ @@ -241,6 +259,20 @@ bool ValueTokenizer::contains(const std::string &value) const return tokens.contains(value); } +/*! Search the text to be processed for regular expression match. + * +\verbatim embed:rst +This method matches the current string against a regular expression using +the :cpp:func:`utils::strmatch() ` function. +\endverbatim + * + * \param str regular expression to be matched against + * \return true if string was found, false if not */ +bool ValueTokenizer::matches(const std::string &str) const +{ + return tokens.matches(str); +} + /*! Retrieve next token * * \return string with next token */ diff --git a/src/tokenizer.h b/src/tokenizer.h index b5d9abf1f7..42a62fefa0 100644 --- a/src/tokenizer.h +++ b/src/tokenizer.h @@ -46,6 +46,7 @@ class Tokenizer { void skip(int n = 1); bool has_next() const; bool contains(const std::string &str) const; + bool matches(const std::string &str) const; std::string next(); size_t count(); @@ -119,6 +120,7 @@ class ValueTokenizer { bool has_next() const; bool contains(const std::string &value) const; + bool matches(const std::string &str) const; void skip(int ntokens = 1); size_t count(); diff --git a/unittest/utils/test_tokenizer.cpp b/unittest/utils/test_tokenizer.cpp index 49cc771a25..4d38bfd14f 100644 --- a/unittest/utils/test_tokenizer.cpp +++ b/unittest/utils/test_tokenizer.cpp @@ -173,6 +173,32 @@ TEST(Tokenizer, default_separators) ASSERT_EQ(t.count(), 2); } +TEST(Tokenizer, contains) +{ + Tokenizer values("test word"); + ASSERT_TRUE(values.contains("test")); + ASSERT_TRUE(values.contains("word")); +} + +TEST(Tokenizer, not_contains) +{ + Tokenizer values("test word"); + ASSERT_FALSE(values.contains("test2")); +} + +TEST(Tokenizer, matches) +{ + Tokenizer values("test word"); + ASSERT_TRUE(values.matches("test")); + ASSERT_TRUE(values.matches("word")); +} + +TEST(Tokenizer, not_matches) +{ + Tokenizer values("test word"); + ASSERT_FALSE(values.matches("test2")); +} + TEST(Tokenizer, as_vector1) { Tokenizer t(" \r\n test \t word \f"); @@ -346,6 +372,19 @@ TEST(ValueTokenizer, not_contains) ASSERT_FALSE(values.contains("test2")); } +TEST(ValueTokenizer, matches) +{ + ValueTokenizer values("test word"); + ASSERT_TRUE(values.matches("test")); + ASSERT_TRUE(values.matches("word")); +} + +TEST(ValueTokenizer, not_matches) +{ + ValueTokenizer values("test word"); + ASSERT_FALSE(values.matches("test2")); +} + TEST(ValueTokenizer, missing_int) { ValueTokenizer values("10");