Я думаю, это потому, что оператор \w
не соответствует пробелам. Поскольку все, что находится после знака равенства, должно вписываться перед закрытием %
, все должно совпадать с тем, что находится внутри этих скобок (иначе все выражение не совпадает).
Этот бит кода работал для меня:
$str = '{%title=append me to the title%}';
preg_match('/{%title=([\w ]+)%}/', $str, $matches);
print_r($matches);
//gives:
//Array ([0] => {%title=append me to the title%} [1] => append me to the title )
Обратите внимание, что использование +
(один или несколько) означает, что пустое выражение, т.е. {%title=%}
не будет соответствовать. В зависимости от того, что вы ожидаете для пробела, вы можете использовать \s
после класса символов \w
вместо реального пробела. \s
будет соответствовать вкладкам, переводам строки и т. Д.