我有一个表达式,正是这样: {gallery id ='2'}
我想从这个表达式获取id(在这个例子中为2),而不是将完整标记替换为另一个字符串。
更具体地说,我想做以下事情:
内容中的字符串:
{gallery id='2'}
使用preg_replace_callback()我想调用此函数:
function changeNumberToGalleryName( $id ){
//get name of the gallery from database where ID = $id
....
....
return $galleryname;
}
我想将 {gallery id ='2'} 替换为图库名称。
感谢您的建议!
答案 0 :(得分:2)
preg_replace("/{\s?\w+\s?id\s?=\s?'\d+'\s?}/", $gallername, $text);
答案 1 :(得分:0)
如果您不想修改您的功能,可以这样做:
$str = preg_replace_callback('~{gallery id=\'\K\d+~',
function ($match) {
return changeNumberToGalleryName($match[0]);
},
$str);
但如果你可以修改它(即将$id
替换为$id[0]
在他的身体中),你可以写:
$str = preg_replace_callback('~{gallery id=\'\K\d+~',
'ChangeNumberToGalleryName',
$str);
但是你真的需要这样做的功能吗?如果图库名称是关联(或索引)数组,例如:
array(
"1" => "gallery 1 name"
"2" => "gallery 2 etc.
)
or
array('nop', 'gallery 1 name', 'gallery 2 name' ...)
你只需要使用匿名函数:
$str = preg_replace_callback('~{gallery id=\'\K\d+~',
function ($match) { return myarray[$match[0]]; },
$str);
答案 2 :(得分:0)
匹配完整标记并捕获标识符:
$re = "/{gallery id='([^']+)'}/";
preg_replace_callback($re, function($match) {
return changeNumberToGalleryName($match[1]);
}, $string);
表达式([^']+)
匹配任何内容,直到找到撇号并将找到的字符串捕获到匹配的第一个内存位置;我稍后使用$match[1]
传递值。
我在这里使用回调通过内存捕获提取标识符,然后将其传递给您的函数;这样你就不必修改你的功能了。