Die Rauten sind Begrenzer. Das allererste Zeichen (die erste Raute) definiert, wie das Abschlusszeichen aussehen soll (auch wieder eine Raute). Genausogut hätten wir ein o nehmen können. Viele nehmen auch ein / als Begrenzer. Sinn des ganzen ist, dass bei einem RegExp nicht nur das Suchmuster, sondern auch Modifikatoren angegeben werden können (in diesem Fall das U). Mit den Begrenzern zeigen wir also, bis wohin die Suche geht und ab wo die Begrenzer anfangen.
Es ist immer so aufgebaut:
[list][*]1 Zeichen Begrenzer = #
[*]0-n Zeichen Suchmuster, wobei das Begrenzer-Zeichen maskiert werden muss (d.h. es darf nicht alleinstehend im Suchmuster auftauchen, da sonst ja gedacht wird es ist das Ende des Suchmusters) = %([^%]+)%
[*]1 Zeichen Begrenzer (dasselbe wie das allererste Zeichen) = #
[*]0-n Zeichen Modifikatoren = U[/list]