Moved patterns into their own file to be organised, and added specs.
Found mistake in pattern, it was matching other phrases it shouldn't as that part isn't conditional. Fixed.
It was eating too much of the string, be less greedy.
Improved the patterns to be a bit more precise, explicitly check for repeat, and not to be too greedy at points.
Moved Patterns to a different file, so these won't be needed now.
Updated the capture names to match the regex patterns, which were updated to match the original method, for easy comparison.
Used a block here, it was calling the method every time and barfing if no @start, so block form only calls on match -> no problem.
Merged Patterns branch.