(?:...)
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.
The ^
does not mean negation when it is located outside square breackets. It means match from the beginning of the string.