使用lex來解析lrc歌詞檔案

2021-08-31 04:14:47 字數 1816 閱讀 1755

剛學習lex的實踐.很簡單.

lrc.l:lex檔案,定義了time tag標記,以及操作

%

num [0-9]+

timetag \[+\:+(\.+)?\]%%

\n ;

. ;%%

int yywrap()

%中間為空,沒有什麼要提前宣告的; num,timetag定義了識別乙個timetag的正規表示式[00:00][00:00.00]。

第乙個%%後定義了找到乙個timetag後的操作,這兒是return,如果不return的話會一直找到檔案結束.

yywrap返回1表示沒有後續檔案,如果有多個檔案,可以在這兒修改yyin變數的值.

lrc.c: c檔案,這兒呼叫yylex()來獲得標記

#include 

extern char* yytext;

extern file* yyin;

int main(int argc, char* argv)

}else printf("can't open %s\n", argv[1]);

}else printf("lrc filename\n");

return 0;

}

yyin是lex的輸入,yytext是儲存token的緩衝指標,程式迴圈呼叫yylex()直至yylex()返回0.每獲得乙個標記就輸出一次.

tear.lrc:樣本lrc檔案

[ti:別說我的眼淚你無所謂]

[ar:東來東往]

[al:]

[by:吳志輝]

[offset:-500]

[00:01.39]www.jpwy.net

[00:16.35][別說我的眼淚你無所謂 - 東來東往

[00:18.39]別說我的眼淚你無所謂

[01:40.09][00:26.01]乙個人在這個夜裡

[01:44.94][00:30.90]孤單得難以入睡

[01:49.31][00:35.41]真的想找個人來陪

[01:53.05][00:40.06]不願意乙個人喝醉

[01:57.42][00:43.52]醉了以後就會流淚

[02:01.77][00:47.87]數著你給的傷悲

[02:06.09][00:52.18]為什麼你總讓我憔悴

[02:10.42][00:56.50]別說我的眼睛你無所謂

[03:28.03][02:14.32][01:00.42]看我流淚你頭也不回

[03:32.36][02:18.61][01:04.71]哭過了淚幹了心變成灰

[03:36.71][02:22.92][01:08.80]我想要的美你還不想給

[03:40.96][02:26.92][01:13.42]傷了的我的心怎去面對

[03:45.43][02:31.43][01:17.79]愛給了你我不後悔

[03:49.81][02:35.84][01:23.17]只希望你給我一次機會

[03:54.16][02:40.20][01:26.45]讓我去追讓我去飛

[03:58.51][02:44.61][01:30.84]畢竟愛過的心需要安慰

[04:02.68][02:48.66][01:35.19]需要你安慰

[04:02.68][02:48.66][01:35]需要你安慰

步驟:lex lrc.l 產生lex.yy.c

gcc -o lrc lex.yy.c lrc.c

然後執行:./lrc tear.lrc就可以看到所有的時間標記都被提取出來了。

C 解析Lrc歌詞檔案過程詳解

看到很多人解析歌詞檔案時寫了一大片的字元處理 而且看得不是很明白,所以自己研究了一下,首先來了解下lrc檔案 時間格式 1 標準格式 分鐘 秒.毫秒 歌詞 注釋 括號 冒號 點號全都要求英文輸入狀態 2 其他格式 分鐘 秒 歌詞 3 其他格式 分鐘 秒 毫秒 歌詞,與標準格式相比,秒後邊的點號被改成...

基於前端的LRC歌詞檔案解析外掛程式

使用方法 本專案已發布到npm上,所以可用npm安裝或者直接引入檔案的方式使用。使用npm安裝 npm install lrc file parser s匯入 import import lyric from lrc file parser 直接引入檔案的方式 lrc file parser.min...

JS解析提取LRC格式的歌詞

參考 ar 王菲 ti 匆匆那年 00 00.51 王菲 匆匆那年 00 01.79 作詞 林夕 00 02.61 作曲 梁翹柏 00 28.64 匆匆那年我們 00 29.92 究竟說了幾遍 00 31.55 再見之後再拖延 00 34.25 可惜誰有沒有 00 35.67 愛過不是一場 00 3...