Referer, target and user agent filter share most of their logic for different matching methods. We introduce a common routine for all of them to not repeat ourselves. Passing a value extractor by reference allows lazy evaluation (filter might be disabled) and overrides for different cases (i.e. domain extractor for exact match).