我有什么:
"%g% (%r% %s%)"
我想要什么:
"get(%g%) (get(%r%) get(%s%))"
我做什么
$zk = "%g% (%r% %s%)";
$pat = '/(%.*%)?/';
$er = 'get($1)';
echo preg_replace($pat, $er, $zk);
我得到的
get(%g% (%r% %s%)get())get()
我做错了什么?
您需要使用一个基于类的否定正则表达式:
(%[^%]+%)
[^%]+
否定了与任何字符匹配但不与%
匹配的字符类。所以这与两个%%
块不匹配。
或非贪婪正则表达式:
(%.+?%)
将匹配项替换为get(1)
演示