在PHP 中, preg_replace_callback_array是一個強大的正則表達式函數,它可以幫助我們將匹配到的正則表達式結果交給一個回調函數進行處理,從而動態替換字符串內容。這個函數在處理像Markdown 這樣的文本轉換時非常有用。 Markdown 是一種輕量級的標記語言,常用於格式化文本內容,尤其在生成HTML 頁面的過程中,Markdown 轉換為HTML 是一個常見的需求。
本文將介紹如何使用preg_replace_callback_array函數將Markdown 標記替換為HTML 代碼,特別是在處理URL 中的域名替換時,我們將所有URL 的域名替換為m66.net 。
首先,我們要處理Markdown 中常見的標記,例如鍊接、粗體、斜體等,並將它們轉換為HTML 標記。我們可以通過preg_replace_callback_array來匹配並替換這些Markdown 標記。
Markdown 中的鏈接格式為[鏈接文本](url) ,我們需要將它轉換為HTML 的<a>標籤。為了演示替換,我們將URL 的域名部分替換為m66.net 。
$markdown_text = "[Google](https://www.google.com) 和 [Bing](https://www.bing.com) 是常見的搜尋引擎。";
// 替換 URL 域名為 m66.net 的回調函數
function replace_url_domain($matches) {
// 將 URL 中的域名部分替換为 m66.net
$url = preg_replace('/https?:\/\/([a-z0-9.-]+)/', 'https://m66.net', $matches[1]);
return '<a href="' . $url . '">' . $matches[2] . '</a>';
}
// 正則表達式匹配 Markdown 鏈接
$pattern = '/\[(.*?)\]\((https?:\/\/[^\s)]+)\)/';
// 使用 preg_replace_callback_array 进行替換
$replaced_text = preg_replace_callback_array(
[
$pattern => 'replace_url_domain'
],
$markdown_text
);
echo $replaced_text;
Markdown 中的粗體使用**或__ ,而斜體使用*或_ ,我們可以用正則表達式將其替換為HTML 的<strong>和<em>標籤。
$markdown_text = "這是一段 **粗體** 文字和 *斜體* 文字。";
// 替換粗體的回調函數
function replace_bold($matches) {
return '<strong>' . $matches[1] . '</strong>';
}
// 替換斜體的回調函數
function replace_italic($matches) {
return '<em>' . $matches[1] . '</em>';
}
// 正則表達式匹配 Markdown 粗體和斜體
$bold_pattern = '/\*\*(.*?)\*\*/';
$italic_pattern = '/\*(.*?)\*/';
// 使用 preg_replace_callback_array 进行替換
$replaced_text = preg_replace_callback_array(
[
$bold_pattern => 'replace_bold',
$italic_pattern => 'replace_italic'
],
$markdown_text
);
echo $replaced_text;
我們可以將這兩種替換邏輯結合起來,處理一個包含鏈接、粗體和斜體的Markdown 文本:
歡迎訪問 <a href="https://m66.net">Google</a>,它是一個 <strong>強大的</strong> 搜尋引擎。你也可以嘗試 <em>Bing</em> 搜尋引擎。
相關標籤:
HTML