-3

我有一个表达,正是这个:{gallery id='2'}

我想从此表达式(在本例中为 2)获取 id,而不是将完整标签替换为另一个字符串。

更具体地说,我想做以下事情:

内容内的字符串:

{gallery id='2'}

使用 preg_replace_callback() 我想调用这个函数:

function changeNumberToGalleryName( $id ){
    //get name of the gallery from database where ID = $id
    ....
    ....
    return $galleryname;
}

我想将{gallery id='2'}替换为 gallery的名称

谢谢你的建议!

4

3 回答 3

2
preg_replace("/{\s?\w+\s?id\s?=\s?'\d+'\s?}/", $gallername, $text);
于 2013-07-26T22:50:27.000 回答
0

如果你不想修改你的函数,你可以这样做:

$str = preg_replace_callback('~{gallery id=\'\K\d+~',
                             function ($match) {
                                 return changeNumberToGalleryName($match[0]);
                             },
                             $str);

但是如果你可以修改它(即替换他体内所有出现的$idby ),你可以写:$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);
于 2013-07-26T23:04:21.767 回答
0

匹配完整标签并捕获标识符:

$re = "/{gallery id='([^']+)'}/";
preg_replace_callback($re, function($match) {
    return changeNumberToGalleryName($match[1]);
}, $string);

该表达式([^']+)匹配任何内容,直到找到撇号并将找到的字符串捕获到匹配的第一个内存位置;我后来$match[1]用来传递价值。

我在这里使用回调通过内存捕获提取标识符,然后将其传递给您的函数;这样你就不必修改你的功能。

于 2013-07-26T23:26:58.197 回答