使用 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;
这是我第一次发帖。
我有一个浏览器游戏的聊天室,人们可以在其中发送这样的字符串:
瓦伦蒂娜主演了一场与保罗的战斗。她正在使用[剑]、[盾牌]和[匕首]。
现在,我想要实现的是检索方括号内的所有单词,并为每个单词创建一个 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;