需要轉化的歌詞:
[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來實現!