網(wǎng)上搜了一下看看有沒有泰坦尼克號完整臺詞,找了好久也沒找到合適的,要么不完整,要么收費,要么數(shù)據(jù)是錯亂的,預(yù)期的臺詞是一個有中英文對照版的,然后按照格式一行行的排列,比如一行英文,一行中文,外加一行對應(yīng)電影的時間 怎么辦呢,想到了電影里的字幕,字幕里有數(shù)據(jù)的,數(shù)據(jù)格式也是統(tǒng)一的,我們利用正則提取一下就好了,開干 首先下載字幕,我在網(wǎng)上下載了一個,點擊這個圖片下載字幕文件:(點擊這個圖片,下載后把后綴名改成ssa就可以了) 然后查找文件里的規(guī)律,如下: 對于英文和中文有兩種格式,對于英語來說,格式如下: 對于中文來說,格式如下: 思路 可以看到前面部分差不多的,后面的字幕之前有幾個字符不一樣,例如英文字幕是0000&}結(jié)尾的,而中文字幕是3000&}結(jié)尾的 我們可以用兩個正則分別提取英語和中文的字幕信息,保存到對應(yīng)的數(shù)組里,數(shù)組里的鍵名為字幕的時間,是個字符串格式,值可以是個數(shù)組,分別是對應(yīng)的php教程字幕 完整代碼如下: <?php$str = file_get_contents('./zimu.ssa'); //load ssa filefunction getResult($preg){ //get Subtitle interface global $str; $result = array(); if(preg_match_all($preg,$str,$match,PREG_OFFSET_CAPTURE)){ foreach($match[1] as $key => $val){ $result[trim($val[0],',')]=$match[2][$key][0]; } } return $result; 部分輸出如下: OK,It's Perfect~ 下一篇貼出完整的字幕 正則里也遇到個問題,理想中[^D]改成[^(?:,D)]的話在getResult里就不需要調(diào)用trim()過濾掉末尾的,符號了,但是在php里(?:)不能用,可能php的正則引擎不支持這個功能吧,以后如果再深入研究的話再看看。 |
|