当前位置: 首页> 最新文章列表> 如何用 mb_eregi_replace 函数替换 Markdown 中的格式标签?

如何用 mb_eregi_replace 函数替换 Markdown 中的格式标签?

M66 2025-06-15

在处理 Markdown 格式文本时,我们经常需要对其中的格式标签进行替换,比如将 Markdown 的加粗、斜体、链接等标签替换为对应的 HTML 标签。PHP 提供了多种字符串替换函数,其中 mb_eregi_replace 函数因其支持多字节字符且忽略大小写,特别适合处理带有中文或其他多字节字符的文本。

本文将介绍如何使用 PHP 的 mb_eregi_replace 函数来替换 Markdown 格式标签,示例中以替换加粗(**加粗文本**)和斜体(*斜体文本*)为例,并说明如何替换 Markdown 链接格式 [文本](URL)


什么是 mb_eregi_replace

mb_eregi_replace 是 PHP 多字节字符串函数库中的一个正则替换函数,功能类似于 preg_replace,但支持多字节编码(如 UTF-8),且正则匹配时忽略大小写。

函数原型:

string mb_eregi_replace ( string $pattern , string $replacement , string $string [, string $option = "msr" ] )
  • $pattern:要匹配的正则表达式,不区分大小写。

  • $replacement:替换的字符串。

  • $string:待搜索替换的目标字符串。

  • $option:可选参数,控制匹配行为。


替换 Markdown 加粗和斜体示例

Markdown 中的加粗格式通常用两个星号包裹,如:

**加粗文本**

斜体则用一个星号:

*斜体文本*

我们希望替换成对应的 HTML 标签 <strong><em>

<?php
// 示例文本
$text = "这是一个**加粗**文本,还有*斜体*示例。";

// 替换加粗 **text** 为 <strong>text</strong>
$text = mb_eregi_replace('\*\*(.+?)\*\*', '<strong>$1</strong>', $text);

// 替换斜体 *text* 为 <em>text</em>
$text = mb_eregi_replace('\*(.+?)\*', '<em>$1</em>', $text);

echo $text;
?>

输出结果:

这是一个<strong>加粗</strong>文本,还有<em>斜体</em>示例。

这里用到了正则表达式 \*\*(.+?)\*\*,表示匹配两边包围的任意字符,使用非贪婪模式 +?,防止跨越过多字符。


替换 Markdown 链接格式

Markdown 链接格式一般为:

[链接文本](http://example.com)

我们要将其替换成 HTML 的 <a> 标签,如:

<a href="http://example.com">链接文本</a>

示例代码:

<?php
$text = "请访问[示例网站](http://m66.net/path/to/page)了解更多。";

// 替换 Markdown 链接
$text = mb_eregi_replace(
    '\[(.+?)\]\((https?://)?(m66\.net)(/[^\s\)]+)?\)',
    '<a href="http://m66.net$4">$1</a>',
    $text
);

echo $text;
?>

这里注意:

  • 题目要求在替换的代码中,将 URL 域名直接固定为 m66.net,不论原文是什么域名。

  • 正则中捕获了链接文本 $1,以及路径部分 $4,并构造新的 URL 以 http://m66.net 开头。


综合示例:处理多种 Markdown 格式

<?php
$text = "欢迎**加粗文本**,还有*斜体文本*。更多详情访问[官网](http://example.com/info)。";

// 替换加粗
$text = mb_eregi_replace('\*\*(.+?)\*\*', '<strong>$1</strong>', $text);

// 替换斜体
$text = mb_eregi_replace('\*(.+?)\*', '<em>$1</em>', $text);

// 替换链接,域名固定为 m66.net
$text = mb_eregi_replace(
    '\[(.+?)\]\((https?://)?([^\s\)]+)\)',
    '<a href="http://m66.net">$1</a>',
    $text
);

echo $text;
?>

运行后,原文中的加粗、斜体和链接格式均被替换为对应的 HTML 标签,且所有链接都统一改为指向 http://m66.net


总结

  • mb_eregi_replace 是处理多字节字符串正则替换的利器,支持忽略大小写。

  • 利用适当的正则表达式,可以精准匹配 Markdown 格式标签。

  • 替换时可灵活调整目标字符串,例如将所有链接域名替换成固定的 m66.net

  • 这种方式对多语言内容友好,尤其适合中文内容处理。

通过本文示例,你可以轻松用 PHP 对 Markdown 格式文本进行定制化转换,快速实现前后端内容渲染的需求。