红穆笔记
首頁 語言筆記 將文本格式的歌詞處理爲HTML格式的文本歌詞
語言筆記 PHP

將文本格式的歌詞處理爲HTML格式的文本歌詞

将文本格式的歌词处理为HTML格式的文本歌词

需要轉化的歌詞:

[01:04.81] 你好
[02:57.54][00:42.86]真情像草原廣闊
[03:04.81][00:50.07]層層風雨不能阻隔
[05:04.81] 叼毛

轉換後的效果:

<p data-time="01:04.81">你好</p>
<p data-time="00:42.86">真情像草原廣闊</p>
<p data-time="00:50.07">層層風雨不能阻隔</p>
<p data-time="02:57.54">真情像草原廣闊</p>
<p data-time="03:04.81">層層風雨不能阻隔</p>
<p data-time="05:04.81">叼毛</p>

嘗試了許許多多的辦法,反正正則夠嗆!

最後還是依靠foreach循環+正則匹配來實現,絞盡腦汁,寫了一天!

最開始的代碼爲:

<?php
// 假設歌詞文本保存在 $lyrics 變量中

// 正則匹配出所有時間戳,並將它們以升序排列
preg_match_all('/\[(\d{2}:\d{2}\.\d{2})\]/', $lyrics, $matches);
$timestamps = $matches[1];
sort($timestamps);

// 根據時間戳將歌詞內容拆分成數組
$lyric_lines = preg_split('/\[\d{2}:\d{2}\.\d{2}\]/', $lyrics);
array_shift($lyric_lines);

// 將時間戳和歌詞內容對應起來,輸出 HTML 標籤
for ($i = 0; $i < count($timestamps); $i++) {
  $time = $timestamps[$i];
  $lyric = trim($lyric_lines[$i]);

  echo '<p data-time="' . $time . '">' . $lyric . '</p>';
}
?>

但有一個問題,如果歌詞文本里面有兩個時間[03:04.81][00:50.07],那麼就會出現不好的情況,匹配出問題!

而且有些歌詞裏面不止一個這種時間,所以正則的話,還需要多次處理纔行!

由於無法預判出現時間的次數和歌詞循環的次數,所以我便利用foreache來實現!

最後的代碼爲:

🔒 隱藏內容:付費閱讀

public function diaoMaoC($str){
	$array = explode("\n",$str);
	if(empty($array) || strpos($str,"\n") === false){
		return $this->diaoMaoLyric($str);
	}else{
		foreach ($array as $v){
			preg_match_all('/\[(\d{2}:\d{2}(.\d{2,})?)\]/',$v,$matchs);
			if(!empty($matchs[1])){
				foreach ($matchs[1] as $v2){
					$timeData[] = $v2;
				}
			}else{
				return $this->diaoMaoLyric($str);
			}
		}
		sort($timeData);
		foreach ($timeData as $v){
			foreach ($array as $v2) {
				if (strpos($v2, $v) !== false) {
					$html .= '<p data-time="' . $v . '">' . preg_replace('/\[(\d{2}:\d{2}(.\d{2,})?)\]/','',$v2) . '</p>';
					break;
				}
			}
		}
		return $html;
	}
	
}

public function diaoMaoLyric($str){
	// 替換[]內的內容
	$str = preg_replace('/\[[^\]]+\]/', '', $str);
	
	// 將換行符替換爲中文逗號
	$str = str_replace("\n", '</p><p>', $str);
	$str = str_replace('\n', '</p><p>', $str);
	
	$str = "<p>".$str."</p>";
	
	$str = str_replace("<p></p>", '', $str);
	
	return $str;
}

微信赞赏

微信

支付宝赞赏

支付寶

✍️ 作者: 紅穆

網站管理員 · 感謝閱讀,更多精彩內容敬請關注

作者主頁 查看主頁 →

相關文章

PHP ob函数记录

PHP ob函數記錄 語言筆記 PHP

下面3個函數的用法 ob_get_contents(); ob_end_clean(); ob_start(); 可以藉助這幾個函數實現緩衝本地文件,以及執行本地腳本代碼。 使用ob_start()把輸出的代碼存到緩衝區,頁面不會顯示出來; 然後用ob_get_contents得到緩衝區的數據。 o…
👁 141
PHP preg

PHP preg 語言筆記 PHP

preg_match_all 函數用於執行一個全局正則表達式匹配。preg_match_all() 語法int preg_match_all ( string $pattern , string $subject [, array &amp;$matches [, int $flags = PREG…
👁 169
PHP 三元运算符与if的详解

PHP 三元運算符與if的詳解 語言筆記 PHP

三元運算符語條件 ? 結果1 : 結果2 說明:問號前面的位置是判斷的條件,如果滿足條件時結果1,不滿足時結果2。本文對三元運算符和if...else...進行對比詳解,希望對大家有所幫助。今天在改論文在線的時候遇到了一個語句看不懂:$if_summary = $row['IF_SUMMARY']=…
👁 189
PHP强制转换类型

PHP強制轉換類型 語言筆記 PHP PHP採集 PHP與mysql

獲取數據類型1.如果想查看某個表達式的值和類型,用var_dump()。 2.如果只是想得到一個易讀懂的類型的表達方式用於調試,用 gettype()。3.要查看某個類型,不要用 gettype(),而用is_type() 函數。字符串轉換爲數值當一個字符串被當作數字來求值時,根據以下規則來決定結果…
👁 232
php 字符串中是否包含指定字符串的多种方法

php 字符串中是否包含指定字符串的多種方法 語言筆記 PHP

strstrstrstr() 函數搜索一個字符串在另一個字符串中的第一次出現。該函數返回字符串的其餘部分(從匹配點)。如果未找到所搜索的字符串,則返回 false。代碼如下:&lt;?php $email = 'user@example.com'; $domain = strstr($email, …
👁 138

推薦閱讀

(自适应手机端)响应式通用医药制药类企业网站模板 HTML5农业园林网站源码下载 0319

(自適應手機端)響應式通用醫藥製藥類企業網站模板 HTML5農業園林網站源碼下載 0319 實用收藏 pbootcms模板

一款自適應手機端的響應式通用醫藥製藥與農業園林PbootCMS企業網站模板,採用HTML5技術。設計風格清新專業,適合醫藥企業或農業公司展示產品與實力。是醫藥健康或農業領域企業搭建官網的基礎選擇。模板展示 安裝說明 網站後臺:/admin.php 賬號:admin 密碼:admin 解壓密碼:www…
👁 54
针灸 治病

鍼灸 治病 業餘愛好 備忘筆記

鍼灸 頭部治病 全頭痛:百會穴(近取穴)、湧泉穴 偏頭痛:對側合谷,同側太陽透率谷 兼有噁心嘔吐:中脘,內關,足三里,公孫 耳後痛: 初痛:天井 久痛:中渚 前額痛:中脘穴 眉棱骨痛:對側陰陵泉下一寸 後腦痛:天柱 初痛:束骨穴 久痛:委中穴 腦瘤:全身抖動顫動,痙攣 處方(全蠍,蜈蚣)息風止痙 下…
👁 233
电脑操作系统软件下载网站模板 0573

電腦操作系統軟件下載網站模板 0573 實用收藏 易優模板

一款針對電腦操作系統與軟件下載的eyoucms網站模板。設計風格技術專業,能夠展示操作系統、軟件應用、下載服務及技術資訊。有助於軟件資源平臺在線上吸引技術用戶。模板展示 安裝說明 網站後臺:/login.php 賬號:admin 密碼:admin 相關文章易優CMS安裝常見問題總結易優CMS(Eyo…
👁 55
(自适应手机端)企业咨询管理网站pbootcms模板 金融服务机构网站源码下载 1024

(自適應手機端)企業諮詢管理網站pbootcms模板 金融服務機構網站源碼下載 1024 實用收藏 pbootcms模板

一款企業諮詢管理PbootCMS網站模板,支持PC與WAP端。設計風格專業穩重,適合管理諮詢公司、金融服務機構展示服務內容與品牌實力。有助於專業服務機構在線上吸引企業客戶,拓展業務。模板展示 安裝說明 網站後臺:/admin.php 賬號:admin 密碼:admin 解壓密碼:www.4s5.cn…
👁 59