精華區beta RegExp 關於我們 聯絡資訊
有一堆資料,我手上有的資訊為 本文和詞性 那有時候我需要用到詞性去做比對,有時候要用到本文做比對 但是我都是要結取出本文,而正規表示法又不能夠比對字串陣列 所以我必須把正規表示法做成下列的樣子: @嚴長壽~Nb@,~.*(<value>@.*~.*@.*~.*@.*~.*)@出生~.* 我以@作為詞的分隔,每個詞有兩個欄位,分別為:「本文~詞性」 那我要去做比對的時候,把我要的資訊放上去 要忽略的地方改為".*",因此會有很多個".*" 但是這樣會讓程式幾乎跑不動,太慢了 請問有沒有其他的方法可以改善... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.17.10.139
thitbbeb:看不懂…不能先直大範圍,再replace不要的東西嗎? 07/09 23:00
LyinZ:把所有的 .* 都改成 .*? 試試 07/10 00:40
ta0306556:恩~測試過好像會快些,可是我的資料庫會出問題~@@? 07/11 21:52
ta0306556:不知道是我程式哪個部分出問題,造成我的資料庫出現 07/11 21:53
ta0306556:MySQL 出現Connection unexpectedly terminated.的錯誤 07/11 22:02
> -------------------------------------------------------------------------- < 作者: lg31cm (我住5F) 看板: RegExp 標題: Re: [問題] 正規表示法處理的很慢 時間: Sat Jul 11 03:39:21 2009 ※ 引述《ta0306556 (POIL)》之銘言: : 有一堆資料,我手上有的資訊為 本文和詞性 : 那有時候我需要用到詞性去做比對,有時候要用到本文做比對 : 但是我都是要結取出本文,而正規表示法又不能夠比對字串陣列 : 所以我必須把正規表示法做成下列的樣子: : @嚴長壽~Nb@,~.*(<value>@.*~.*@.*~.*@.*~.*)@出生~.* : 我以@作為詞的分隔,每個詞有兩個欄位,分別為:「本文~詞性」 : 那我要去做比對的時候,把我要的資訊放上去 : 要忽略的地方改為".*",因此會有很多個".*" : 但是這樣會讓程式幾乎跑不動,太慢了 : 請問有沒有其他的方法可以改善... 典型的.*濫用,假如你的 regex engine 是 NFA(大部分 regex都是採用NFA),可以說一定慢到你受不了,因為.* 會一直往後吃字元直到字串結尾或是end of line,接著 因為你的.*後面又有其他字元,regex engine只好不斷 backtracking直到找到match的字元為止,假如你要處理的 資料很短還沒關係,資料一長一定會讓match時間成指數級成長 你的.*還不只一個,engine光是backtracking就夠忙的了,當然 慢到讓你覺得電腦當了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.124.98.159
ta0306556:恩,感謝指教,可是我的問題我想不到更好的方法了~ 07/11 21:51
ta0306556:請問有沒有什麼其他的方法讓我可以解我的問題呢? 07/11 21:52
ta0306556:因為我的每個.*後面不是@就是~我可以設定遇到這兩個符號 07/11 23:08
ta0306556:就中斷的方法嗎? 07/11 23:09
MichaelHsin: [^@]* 07/12 00:14
ta0306556:對吼,以前用過,我居然忘了...感謝提醒! 07/12 01:17