2013-07-31 56 views

回答

6

這是一個設計決定。

它可以,但如果編譯執行一步,那麼多次使用相同的正則表達式效率會非常低。正則表達式的編制是計算昂貴的操作(就像編譯寫的編程語言是貴一些源代碼),所以如果你想使用正則表達式超過一次,然後做

expensive_compilation(regex_object, "/the/regular\.expression$"); 

for (i = 0; i < 1000000; i++) 
    regex_match(regex_object, next_line_to_be_processed); 

比在循環中移動(冗餘)編譯要快得多的

+1

+1 - 是,編譯的正則表達式不是C唯一的;你可以(或者必須,也可以隱含地)在AFAIK,Java,C#,Python,甚至Javascript中做同樣的事情,儘管其中許多這些允許你(無效,在@ H2CO3描述的情況下) 。 –

+0

@ acheong87謝謝!是的,儘管從控制怪胎的角度來看(即「首先,我完全忽視了效率,並將精力集中在易用性上」),但我不覺得它太好, G。 POSIX''API不提供便捷的單步界面。如果你知道你只會使用一次正則表達式,這非常有用。 - 另外,我們也可以在SQL引擎中注意到這種編譯和執行模式(例如'sqlite3_prepare()',用於同樣的目的。) – 2013-07-31 07:57:44

+0

謝謝。來自Perl,我發現一個正則表達式編譯代價昂貴令人驚訝。 – user13107