PHP preg_用多个正则表达式替换_回调

PHP preg_用多个正则表达式替换_回调,php,regex,preg-replace-callback,Php,Regex,Preg Replace Callback,大家好,我有下面关于php的代码 return preg_replace_callback("#\{gallery: '(.+?)'\}#i", function($i) { $oGallery = new Gallery( $i[1] ); $oGallery->PublicSide(); }, $string); 现在我想添加以下内容: 假设我希望允许用户选择是否要将目录添加到库中,那么我会: "#\{gallery: '(

大家好,我有下面关于php的代码

return preg_replace_callback("#\{gallery: '(.+?)'\}#i", 
    function($i)
    { 
        $oGallery = new Gallery( $i[1] );
        $oGallery->PublicSide();
    }, $string);
现在我想添加以下内容:

假设我希望允许用户选择是否要将目录添加到库中,那么我会:

"#\{gallery: '(.+?)' dir: '(.+?)')\}#i"
因此,用户有药剂要做:
{gallery:'folder'}
{gallery:'folder'dir:'1'}

我将如何使用正则表达式来实现这一点,这样即使目录选项不存在,也会进行替换?提前谢谢

让它成为可选的

"#\{gallery: '(.+?)'(?: dir: '(.+?)')?\}#i"
(?:text)
创建非捕获组

在组后添加
使其成为可选的使其成为可选的

"#\{gallery: '(.+?)'(?: dir: '(.+?)')?\}#i"
(?:text)
创建非捕获组


添加
在小组将其设置为可选后

再问一个问题,这在我的PHP 5.3 localhost上有效,但在我的5.2.17服务器上似乎不起作用,似乎是单引号的问题,知道发生了什么吗?再问一个问题,这在我的PHP 5.3 localhost上有效,但在我的5.2.17服务器上似乎不起作用,好像是单引号,知道怎么回事吗?
"#\{gallery: '(.+?)'(?: dir: '(.+?)')?\}#i"