1) # è interpretato come delimitatore dell'espressione regolare.
Ecco alcuni dei simboli che che puoi usare come delimitatore:
/
@
#
`
~
%
&
'
"
(ce ne sono anche altri, ma non ricordo l'elenco completo).

Poi ci sono tutta una serie di opzioni da mettere dopo il delimitatore di chiusura e in genere si chiamano "modificatori":
"i" significa che l'espressione sarà "case insensitive" (non c'è differenza tra maiuscole e minuscole)
"s" significa che la tua stringa può includere anche dei "newline" (cioè in qualche punto vai "a capo")

2) ?: indica che quello che segue è una sorta di "subpattern". Un'espressione regolare all'interno dell'espressione regolare.

3) Esatto.

4) Quello che nell'espressione regolare è nelle parentesi tonde verrà interpretato come variabile.