通過正規表示式提取鐵達尼號字幕裡的所有台詞

2022-07-05 05:48:08 字數 1518 閱讀 2877

網上搜了一下看看有沒有鐵達尼號完整台詞,找了好久也沒找到合適的,要麼不完整,要麼收費,要麼資料是錯亂的,預期的台詞是乙個有中英文對照版的,然後按照格式一行行的排列,比如一行英文,一行中文,外加一行對應電影的時間

怎麼辦呢,想到了電影裡的字幕,字幕裡有資料的,資料格式也是統一的,我們利用正則提取一下就好了,開幹

然後查詢檔案裡的規律,如下:

對於英文和中文有兩種格式,對於英語來說,格式如下:

對於中文來說,格式如下:

思路可以看到前面部分差不多的,後面的字幕之前有幾個字元不一樣,例如英文本幕是0000&}結尾的,而中文字幕是3000&}結尾的

我們可以用兩個正則分別提取英語和中文的字幕資訊,儲存到對應的陣列裡,陣列裡的鍵名為字幕的時間,是個字串格式,值可以是個陣列,分別是對應的字幕

完整**如下:

<?php 

$str = file_get_contents('./zimu.ssa'); //

load ssa file

function getresult($preg)

}return

$result;}

$result_en = getresult('/marked=([^d]*).*?0000&}(.*)/'); //

獲取英文本幕

$result_cn = getresult('/marked=([^d]*).*?3000&}(.*)/'); //

獲取中文字幕

$result = array

();$result_en = array_filter($result_en,function($val,$key) use(&$result,&$result_cn)

else

return

true

;

},array_filter_use_both );

function out($arr,$isarr=1)

}out(

$result); //

輸出中文和英文有對應的字幕

out($result_en,0); //

輸出只有英文的字幕

out($result_cn,0); //

輸出只有中文的字幕

?>

部分輸出如下:

正則裡也遇到個問題,理想中[^d]改成[^(?:,d)]的話在getresult裡就不需要呼叫trim()過濾掉末尾的,符號了,但是在php裡(?:)不能用,可能php的正則引擎不支援這個功能吧,以後如果再深入研究的話再看看。      

通過正規表示式提取網頁

private string getwebpage string uri 0 trim tolower 存在分號進行分割 if strtype text html 返回型別不為text html 直接返回空值 if res.contenttype.tolower replace string.emp...

jmeter 正規表示式提取

我們在做壓測時,經常會碰到需要上個介面的結果作為引數傳遞到下乙個介面,此時需要用到正規表示式提取功能。1 新增jmeter正規表示式提取器 在具體的request下新增jmeter正規表示式提取器 jmeter正規表示式在 後置處理器 下面 例1如下 引用名稱 tokenid 自己定義 模板 1 匹...

正規表示式提取時間

時間的各種格式都可以通過正規表示式來匹配,例如我們想精確匹配hh mm的時間,即包含小時和分鐘,可以使用下面的表示式 0 9 0 0 9 1 0 9 2 0 3 0 5 0 9 0 9 0 0 9 1 0 9 2 0 3 0 5 0 9 更多關於時間和日期的正規表示式,參考 regexlib.pub...