Here is a fully regex based solution:
public static void main(String[] args) throws Exception {
    final String in = "My db objects are db.main_flow_tbl, 'main_flow_audit_tbl', main_request_seq and MAIN_SUBFLOW_TBL.";
    final Pattern pat = Pattern.compile("main_(?!\\w*?(?:audit|seq))\\w++", Pattern.CASE_INSENSITIVE);
    final Matcher m = pat.matcher(in);
    while(m.find()) {
        System.out.println(m.group());
    }
}
Output:
main_flow_tbl
MAIN_SUBFLOW_TBL
This assumes that table names can only contain A-Za-Z_ which \w is the shorthand for.
Pattern breakdown:
- main_is the liternal "main" that you want tables to start with
- (?!\\w*?(?:audit|seq))is a negative lookahead (not followed by) which takes any number of- \wcharacters (lazily) followed by either "audit" or "seq". This excludes tables names that contain those sequences.
- \\w++consume any table characters possesively.
EDIT
OP's comment they may contain numbers as well
In this case use this pattern:
main_(?![\\d\\w]*?(?:audit|seq))[\\d\\w]++
i.e. use [\\d\\w] rather than \\w