Одно регулярное выражение будет:
%%(.*?)%%
Как в:
$string = preg_replace('/%%(.*?)%%/', '{replacement for $1}', $string);
.*
соответствует «чему угодно», а ?
делает его не жадным, что означает, что он пытается найти максимально короткое совпадение. Если у вас есть строка типа "%%a%% %%b%%"
, вы не хотите, чтобы она нашла самое длинное совпадение, которое может быть a%% %%b
.
%%a%% %%b%% # Greedy
^^^^^^^
%%a%% %%b%% # Non-greedy
^ ^
$1
в строке замены - это любой совпадающий тег. В вашем примере это будет слово gallery
.