function replaceContent($matches = array()){
if ($matches[1] == "nlist"){
// do stuff
return "replace value";
} elseif ($matches[1] == "alist"){
// do stuff
return "replace value";
}
return false;
}
preg_replace_callback('/<([n|a]list)\b[^>]*>(.*?)<\/[n|a]list>/','replaceContent', $page_content);
如果找到匹配项,则replaceContent()中的$ matches返回此数组:
Array
(
[0] => <nlist>#NEWSLIST#</nlist>
[1] => nlist
[2] => #NEWSLIST#
)
Array
(
[0] => <alist>#ACTIVITYLIST#</alist>
[1] => alist
[2] => #ACTIVITYLIST#
)
目前我的preg_replace_callback函数用$ matches [0]替换匹配值。我想要做什么,并想知道是否可能是替换标签内的所有内容($ matches [2]),同时能够进行$ matches [1]检查。
在此处测试我的正则表达式:http://rubular.com/r/k094nulVd5
答案 0 :(得分:1)
您只需调整返回值即可包含不想要替换的部分:
function replaceContent($matches = array()){
if ($matches[1] == "nlist"){
// do stuff
return sprintf('<%s>%s</%s>',
$matches[1],
'replace value',
$matches[1]);
} elseif ($matches[1] == "alist"){
// do stuff
return sprintf('<%s>%s</%s>',
$matches[1],
'replace value',
$matches[1]);
}
return false;
}
preg_replace_callback('/<([n|a]list)\b[^>]*>(.*?)<\/[n|a]list>/','replaceContent', $page_content);
请注意:
sprintf
内的模式是根据preg_replace_callback
使用的正则表达式生成的。<nlist>
或<alist>
标记中的可能属性),则还需要将此数据导入捕获组,以便它在$matches
内可用。