如何用PHP将字符串中##包裹内容替换为<strong>标签
解决PHP中##包裹内容替换为标签的问题
直接用str_replace会把所有##都替换成起始<strong>标签,没法成对生成闭合标签。这种场景用正则表达式的preg_replace就能完美解决,它可以精准匹配成对的##及其中间的内容。
直接上可用代码:
// 原始字符串 $toconvert = "Hello my name is ##John## This is my ##question## Thank you for ##reading## and giving your ##Answer##"; // 正则替换:匹配##包裹的内容,替换为<strong>包裹 $converted = preg_replace('/##(.*?)##/', '<strong>$1</strong>', $toconvert); // 输出结果 echo $converted;
代码说明
- 正则表达式
/##(.*?)##/:##:匹配前后的分隔符(.*?):非贪婪匹配捕获##之间的所有内容(非贪婪模式能避免把多个##段的内容连在一起匹配,比如不会把##John##...##question##当成一个整体)$1:指代捕获到的##之间的内容,替换后自动生成<strong>捕获内容</strong>的结构
str_replace之所以不行,是因为它是全局替换所有匹配项,会把每一个##都换成<strong>,自然就没有闭合标签了,正则是这类成对替换场景的最优解。
内容的提问来源于stack exchange,提问作者PTTW
相关产品推荐
相关产品推荐

