30 shared_ptr<RegexBackrefManager> backrefManager,
33 , m_isExactMatch(isExactMatch)
41 m_componentRegex.assign(
m_expr);
43 m_pseudoMatchers.clear();
44 m_pseudoMatchers.push_back(make_shared<RegexPseudoMatcher>());
46 for (
size_t i = 1; i <= m_componentRegex.mark_count(); i++) {
47 m_pseudoMatchers.push_back(make_shared<RegexPseudoMatcher>());
63 NDN_THROW(
Error(
"Non-exact component search is not supported yet"));
65 std::smatch subResult;
66 std::string targetStr = name.
get(offset).
toUri();
67 if (std::regex_match(targetStr, subResult, m_componentRegex)) {
68 for (
size_t i = 1; i <= m_componentRegex.mark_count(); i++) {
69 m_pseudoMatchers[i]->resetMatchResult();
70 m_pseudoMatchers[i]->setMatchResult(subResult[i]);
bool match(const Name &name, size_t offset, size_t len=1) override
RegexComponentMatcher(const std::string &expr, shared_ptr< RegexBackrefManager > backrefManager, bool isExactMatch=true)
Create a RegexComponent matcher from expr.
shared_ptr< RegexBackrefManager > m_backrefManager
void toUri(std::ostream &os) const
Write *this to the output stream, escaping characters according to the NDN URI Scheme.
std::vector< name::Component > m_matchResult
Represents an absolute name.
const Component & get(ssize_t i) const
Get the component at the given index.
void compile() override
Compile the regular expression to generate the more matchers when necessary.