2
我參考Regular expressions in C: examples?爲什麼使用PCRE庫時需要顯式編譯正則表達式?
似乎正則表達式必須在使用前「編譯」。爲什麼這需要明確完成?爲什麼'pcre_exec'不能自己做這項工作?
我參考Regular expressions in C: examples?爲什麼使用PCRE庫時需要顯式編譯正則表達式?
似乎正則表達式必須在使用前「編譯」。爲什麼這需要明確完成?爲什麼'pcre_exec'不能自己做這項工作?
這是一個設計決定。
它可以,但如果編譯和執行一步,那麼多次使用相同的正則表達式效率會非常低。正則表達式的編制是計算昂貴的操作(就像編譯寫的編程語言是貴一些源代碼),所以如果你想使用正則表達式超過一次,然後做
expensive_compilation(regex_object, "/the/regular\.expression$");
for (i = 0; i < 1000000; i++)
regex_match(regex_object, next_line_to_be_processed);
將比在循環中移動(冗餘)編譯要快得多的。
+1 - 是,編譯的正則表達式不是C唯一的;你可以(或者必須,也可以隱含地)在AFAIK,Java,C#,Python,甚至Javascript中做同樣的事情,儘管其中許多這些允許你(無效,在@ H2CO3描述的情況下) 。 –
@ acheong87謝謝!是的,儘管從控制怪胎的角度來看(即「首先,我完全忽視了效率,並將精力集中在易用性上」),但我不覺得它太好, G。 POSIX''API不提供便捷的單步界面。如果你知道你只會使用一次正則表達式,這非常有用。 - 另外,我們也可以在SQL引擎中注意到這種編譯和執行模式(例如'sqlite3_prepare()',用於同樣的目的。) –
2013-07-31 07:57:44
謝謝。來自Perl,我發現一個正則表達式編譯代價昂貴令人驚訝。 – user13107