使用 preg_match 查找括号中的所有值并将它们传递给变量

using preg_match to find all values in brackets and pass them to variable

这是我第一次发帖。

我有一个浏览器游戏的聊天室,人们可以在其中发送这样的字符串:

瓦伦蒂娜主演了一场与保罗的战斗。她正在使用[剑]、[盾牌]和[匕首]。

现在,我想要实现的是检索方括号内的所有单词,并为每个单词创建一个 link 指向显示项目描述的模态 window。

我的代码是这个:


function gdrcd_chatcolor3($str) {
    $search = [
           '#\[(.*?)\]#'
    ];
    
        $fullString = $chat_message;
                    $sTest = $str;
    preg_match('#\[(.*?)\]#', $sTest, $aMatches);
                    $artefatto = $aMatches[1];
                    $caricaoggetto = gdrcd_query("SELECT * FROM oggetto WHERE oggetto.nome='".gdrcd_filter('get', $artefatto)."'");
    
    $urloggetto= "javascript:modalWindow('oggetto', 'Oggetto', 'popup.php?page=popupitem&oggetto=". $caricaoggetto['id_oggetto'] ."', 800, 450);";
    
    $replace = [
           '<a href="' . $urloggetto . '"><span style="color: #c21616;">[]</span></a>',
    ];

    return preg_replace($search, $replace, $str);
}

哪种作品。

我的意思是,它适用于第一项,而且我能够使用第一项的 ID 加载模态 window。但是第二个,第三个等等,项目,显示所有相同的模态window。

我不是程序员。我知道我必须创建一种 cicle 或类似的东西,以对每个项目进行 $urloggetto 更改。

以便加载第一个项目

popup.php?page=popupitem&oggetto=first item id; 

将加载第二个项目

popup.php?page=popupitem&oggetto=scond item id

以此类推

有什么帮助吗?

您可以使用 preg_replace_callback 而不是使用 preg_match,并为 $aMatches 产生的每个匹配项对输入 $str 进行替换。

捕获组1的值在$aMatches[1]

例如:

function gdrcd_chatcolor3($str) {
    return preg_replace_callback('#\[([^][]*)\]#', function($aMatches) {
        $caricaoggetto = gdrcd_query("SELECT * FROM oggetto WHERE oggetto.nome='".gdrcd_filter('get', $aMatches[1])."'");
        $urloggetto= "javascript:modalWindow('oggetto', 'Oggetto', 'popup.php?page=popupitem&oggetto=". $caricaoggetto['id_oggetto'] ."', 800, 450);";
        return '<a href="' . $urloggetto . '"><span style="color: #c21616;">'.$aMatches[1].'</span></a>';
    }, $str);
}

注意您不必使用像

这样的中间字符串和变量
$fullString = $chat_message;
$sTest = $str;