@Override
    public String toString() {
        StringBuilder sb = new StringBuilder(512);
        sb.append("MATCHER.(").append(matcherSourceLocation).append("):\n")
          .append("    VARIABLE:\n");
        for (MatcherAction action : dynamicActions) {
            if (action instanceof MatcherVariableAction) {
                sb.append("        @").append(((MatcherVariableAction) action).getVariableName())
                    .append(":    ").append(action.getMatchExpression()).append('\n');
                sb.append("        -->").append(action.getMatches().toStrings()).append('\n');
            }
        }
        sb.append("    REQUIRE:\n");
        for (MatcherAction action : dynamicActions) {
            if (action instanceof MatcherRequireAction) {
                sb.append("        ").append(action.getMatchExpression()).append('\n');
                if (action.getMatches() != null) {
                    sb.append("        -->").append(action.getMatches().toStrings()).append('\n');
                }
            }
        }
        sb.append("    FAIL_IF_FOUND:\n");
        for (MatcherAction action : dynamicActions) {
            if (action instanceof MatcherFailIfFoundAction) {
                sb.append("        ").append(action.getMatchExpression()).append('\n');
                if (action.getMatches() != null) {
                    sb.append("        -->").append(action.getMatches().toStrings()).append('\n');
                }
            }
        }
        sb.append("    EXTRACT:\n");
        for (MatcherAction action : dynamicActions) {
            if (action instanceof MatcherExtractAction) {
                sb.append("        ").append(action).append('\n');
                if (action.getMatches() != null) {
                    sb.append("        -->").append(action.getMatches()).append('\n');
                }
            }
        }
        for (MatcherAction action : fixedStringActions) {
            sb.append("        ").append(action).append('\n');
        }
        return sb.toString();
    }
Fires all matcher actions.
IFF all success then we tell the userAgent

@param userAgent The useragent that needs to analyzed
analyzer/src/main/java/nl/basjes/parse/useragent/analyze/Matcher.java