Repetition is bad. Suggest a single pattern where the colon and everything after is optional:

```Pattern.compile("((" + BYON + "|" + BYON.toUpperCase() + ")(?::\\((.*)\\)))?$");```

Specifying case-insensitive matching with `(?i)` reduces the repetition further by eliminating the `toUpperCase` nonsense:

```Pattern.compile("(?i)" + BYON + "(?::\\((.*)\\))?$");```

Not that I've tested either of those ;o)  Note that dropping the redundant capturing group around the "byon" prefix will change the indices of the later capturing groups.