'Check if :entry: has any string fields or strings in a list field that match :regexp:
:param entry: Entry instance
:param regexp: Compiled regexp
:param find_from: None or a list of fields to search from
:param not_regexps: None or list of regexps that can NOT match
:return: Field matching'

def matches(self, entry, regexp, find_from=None, not_regexps=None):

    unquote_fields = [u'url']
    for field in (find_from or [u'title', u'description']):
        if (not entry.get(field, eval_lazy=find_from)):
            continue
        values = entry[field]
        if (not isinstance(values, list)):
            values = [values]
        for value in values:
            if (not isinstance(value, basestring)):
                value = str(value)
            if (field in unquote_fields):
                value = unquote(value)
            if regexp.search(value):
                for not_regexp in (not_regexps or []):
                    if self.matches(entry, not_regexp, find_from=[field]):
                        entry.trace((u'Configured    not_regexp    %s    matched,    ignored' % not_regexp))
                        break
                else:
                    return field
