bool OptimizedRegularExpressionImpl<thread_safe>::match(const char * subject, size_t subject_size, Match & match) const
{
    if (is_trivial)
    {
        const char * pos;
        if (is_case_insensitive)
            pos = strcasestr(subject, required_substring.data());
        else
            pos = strstr(subject, required_substring.data());

        if (pos == nullptr)
            return 0;
        else
        {
            match.offset = pos - subject;
            match.length = required_substring.size();
            return 1;
        }
    }
    else
    {
        if (!required_substring.empty())
        {
            const char * pos;
            if (is_case_insensitive)
                pos = strcasestr(subject, required_substring.data());
            else
                pos = strstr(subject, required_substring.data());

            if (nullptr == pos)
                return 0;
        }

        StringPieceType piece;

        if (!RegexType::PartialMatch(StringPieceType(subject, subject_size), *re2, &piece))
            return 0;
        else
        {
            match.offset = piece.data() - subject;
            match.length = piece.length();
            return 1;
        }
    }
}
Example #2
0
	BasicSplitIterator(StringPieceType const &v, CharType split_)
		: head(v.data()), tail(v.data()), last(v.data() + v.size()), split(split_) {
		Init(v.size());
	}