php - php中preg_replace的问题-在html中转换特定代码
问题描述
我正在尝试改变它:
§f§lWORDHERE
在这:
<span style="color: white;><b>WORDHERE</b></span>
我以为有了这个我会实现它,但显然它不是这样的:
<?php
$colorcodes = array(
'/§f/',
'/§l/'
);
$replacement = array(
'<span style="color: white;">$0</span>',
'<b>$0</b>',
);
$str = "§f§lWORDHERE";
$str_res = preg_replace($colorcodes, $replacement, $str);
echo $str_res;
?>
这个想法是:
§F => white
§L => bold
提前致谢
解决方案
我会先抓住标志,然后替换它们:
$str = '§f§lWORDHERE';
$replacements = [
'§f' => '<span style="color: white;">$0</span>',
'§l' => '<b>$0</b>',
];
if (preg_match('/^(?<flags>(?:§[a-z])+)(?<string>.*)/iu', $str, $matches)) {
$str_res = $matches['string'];
foreach (mb_str_split($matches['flags'], 2) as $flag) {
$str_res = preg_replace('/.+/', $replacements[$flag], $str_res);
}
echo $str_res;
}
笔记:
mb_str_split($matches['flags'], 2)
可以替换为:
str_split($matches['flags'], 3)
如果您使用的是 PHP < 7.4。
推荐阅读
- javascript - 如何正确使用拼接和切片【Typescript】
- django - 我的 Django 信号超出了最大递归深度
- javascript - 如何使用 JavaScript reduce() 方法在间隔之间添加范围
- javascript - 将元素拖放到第二个 ul 中使其为空
- invoice - Odoo 13:如何在发票中打印 move_id(付款号)?
- r - 如何从数据框中删除行而不重写它?
- python-3.x - 从 s3 存储桶获取旧文件路径
- javascript - Angular按名称获取类的属性
- google-bigquery - 如何在 Jupyter 笔记本中调用 BigQuery 函数
- sql - 如何在没有 à 分组的情况下将虚构行添加到 Oracle 中的 SQL 结果