(?:...) denotes a non capturing group.
?: is used when you want to group an expression, but you want to avoid to return it as a matched/captured portion of the string.
^ does not mean negation when it is located outside square breackets. It means match from the beginning of the string.