我有什么:
"%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()
我做错了什么?
答案 0 :(得分:1)
您需要使用基于否定类的正则表达式:
(%[^%]+%)
[^%]+
否定了char类,它匹配任何字符但不匹配%
。所以这不会匹配两个%%
块。
或非贪婪的正则表达式:
(%.+?%)
将匹配项替换为get(\1)