如果匹配字符串不在数组中,则跳过 preg_replace
Skip preg_replace if match string is not in array
我有替换字符串 ex 的功能。 :smile: 带图片标签。
function out_emoj($str)
{
$emoj_array = array(
"cry", "grimacing", "joy","smiley","innocent", "wink", "flushed", "slight_smile",
"stuck_out_tongue_winking_eye", "relaxed", "crab","cat","expressionless", "pig", "rose", "cherry_blossom",
"sunny", "cloud_snow", "coffee","tea","grin", "ring", "crown", "nerd",
"heart_eyes", "kissing_heart", "sunglasses","scream","rage","disappointed","fearful","confused",
"dizzy_face", "zipper_mouth", "thermometer_face","sleeping","ghost","smiley_cat","smile_cat","joy_cat",
"heart_eyes_cat", "smirk_cat", "kissing_cat","scream_cat","crying_cat_face","pouting_cat","thumbsup","thumbsdown",
"angel", "dancer", "kimono","heart","purple_heart","sparkling_heart","heart_decoration","snowflake",
);
return preg_replace("/:(.*?):/", " <img width='22' src='".base_url('assets/img/emojiones/.png')."' alt=''> ", $str);
}
我想检查匹配字符串是否在数组中然后替换否则跳过。
例如:如果用户输入 :notfound: 函数将添加带有不存在的图像的标签。我想先检查“notfound”是否在数组中。
阿克塔鲁斯王子,你可以将preg_replace_callback
添加到你的golgot武器中:
return preg_replace_callback("/:(.*?):/", function ($m) use ($emoj_array) {
if (in_array($m[1], $emoj_array))
return ' <img width="22" src="' . base_url('assets/img/emojiones/' . $m[1] . '.png') . '" alt="' . $m[1] . '"> ';
return $m[0];
}, $str);
另一种方法是构建一个映射原始数组的模式数组并使用 preg_replace
,但它的效率较低,因为每个模式都会解析一次字符串。
其他方式:建立交替:
$pattern = '/:(' . implode('|', $emoj_array) . '):/';
return preg_replace($pattern, ' <img width="22" src="' . base_url('assets/img/emojiones') . '/.png" alt=""> ', $str);
function out_emoj($str)
{
$emoj_array = array(
"cry", "grimacing", "joy","smiley","innocent", "wink", "flushed", "slight_smile",
"stuck_out_tongue_winking_eye", "relaxed", "crab","cat","expressionless", "pig", "rose", "cherry_blossom",
"sunny", "cloud_snow", "coffee","tea","grin", "ring", "crown", "nerd",
"heart_eyes", "kissing_heart", "sunglasses","scream","rage","disappointed","fearful","confused",
"dizzy_face", "zipper_mouth", "thermometer_face","sleeping","ghost","smiley_cat","smile_cat","joy_cat",
"heart_eyes_cat", "smirk_cat", "kissing_cat","scream_cat","crying_cat_face","pouting_cat","thumbsup","thumbsdown",
"angel", "dancer", "kimono","heart","purple_heart","sparkling_heart","heart_decoration","snowflake",
);
return preg_replace_callback("/:(.*?):/",
function($m) use ($emoj_array)
{
if (in_array($m[1],$emoj_array))
{
return " <img width='22' src='".base_url('assets/img/emojiones/'.$m[1].'.png')."' alt='{$m[1]}'> ";
}
else
{
return ':'.$m[1].':';
}
}
, $str);
}
谢谢@Casimir et Hippolyte 和@rizier123 这是我的解决方案
我有替换字符串 ex 的功能。 :smile: 带图片标签。
function out_emoj($str)
{
$emoj_array = array(
"cry", "grimacing", "joy","smiley","innocent", "wink", "flushed", "slight_smile",
"stuck_out_tongue_winking_eye", "relaxed", "crab","cat","expressionless", "pig", "rose", "cherry_blossom",
"sunny", "cloud_snow", "coffee","tea","grin", "ring", "crown", "nerd",
"heart_eyes", "kissing_heart", "sunglasses","scream","rage","disappointed","fearful","confused",
"dizzy_face", "zipper_mouth", "thermometer_face","sleeping","ghost","smiley_cat","smile_cat","joy_cat",
"heart_eyes_cat", "smirk_cat", "kissing_cat","scream_cat","crying_cat_face","pouting_cat","thumbsup","thumbsdown",
"angel", "dancer", "kimono","heart","purple_heart","sparkling_heart","heart_decoration","snowflake",
);
return preg_replace("/:(.*?):/", " <img width='22' src='".base_url('assets/img/emojiones/.png')."' alt=''> ", $str);
}
我想检查匹配字符串是否在数组中然后替换否则跳过。 例如:如果用户输入 :notfound: 函数将添加带有不存在的图像的标签。我想先检查“notfound”是否在数组中。
阿克塔鲁斯王子,你可以将preg_replace_callback
添加到你的golgot武器中:
return preg_replace_callback("/:(.*?):/", function ($m) use ($emoj_array) {
if (in_array($m[1], $emoj_array))
return ' <img width="22" src="' . base_url('assets/img/emojiones/' . $m[1] . '.png') . '" alt="' . $m[1] . '"> ';
return $m[0];
}, $str);
另一种方法是构建一个映射原始数组的模式数组并使用 preg_replace
,但它的效率较低,因为每个模式都会解析一次字符串。
其他方式:建立交替:
$pattern = '/:(' . implode('|', $emoj_array) . '):/';
return preg_replace($pattern, ' <img width="22" src="' . base_url('assets/img/emojiones') . '/.png" alt=""> ', $str);
function out_emoj($str)
{
$emoj_array = array(
"cry", "grimacing", "joy","smiley","innocent", "wink", "flushed", "slight_smile",
"stuck_out_tongue_winking_eye", "relaxed", "crab","cat","expressionless", "pig", "rose", "cherry_blossom",
"sunny", "cloud_snow", "coffee","tea","grin", "ring", "crown", "nerd",
"heart_eyes", "kissing_heart", "sunglasses","scream","rage","disappointed","fearful","confused",
"dizzy_face", "zipper_mouth", "thermometer_face","sleeping","ghost","smiley_cat","smile_cat","joy_cat",
"heart_eyes_cat", "smirk_cat", "kissing_cat","scream_cat","crying_cat_face","pouting_cat","thumbsup","thumbsdown",
"angel", "dancer", "kimono","heart","purple_heart","sparkling_heart","heart_decoration","snowflake",
);
return preg_replace_callback("/:(.*?):/",
function($m) use ($emoj_array)
{
if (in_array($m[1],$emoj_array))
{
return " <img width='22' src='".base_url('assets/img/emojiones/'.$m[1].'.png')."' alt='{$m[1]}'> ";
}
else
{
return ':'.$m[1].':';
}
}
, $str);
}
谢谢@Casimir et Hippolyte 和@rizier123 这是我的解决方案