2016-04-25 28 views
0

克隆(編譯)regex_t結構的方式展望regex_t man page,有一個regcomp()功能,從一個字符串和一個雙重功能regfree()編譯一個regex_t結構來釋放regex_t(據我所知,釋放需要因regex_t內部使用一些動態內存)。最好用C

但是,該手冊頁未提及將已編譯的regex_t克隆到另一個regex_t結構中的功能。有沒有辦法做到這一點?

我能弄清楚的唯一機制是從源字符串中重新編譯,但我想這比在regex_t級別複製效率低。

回答

0

爲什麼「克隆」? regex_t不包含任何關於與之比較的輸入的信息(與regexec)。這只是正則表達式的「編譯」版本。你不必複製它。只要使用它。

+0

在我的應用程序中,我有一個'regex_t'對象,它是另一個名爲StringFilterItem的類的一部分(詳情請見:https://github.com/telefonicaid/fiware-orion/blob/d6969490c8db77b2147fccbd986aab49303b5e8c/src/lib/rest/ StringFilter.h#L115)。我需要複製StringFilterItem類的實例,包括其所有內部元素,包括已編譯的'regex_t'字段。在目前我正在重新編譯正則表達式(因爲原始正則表達式字符串是StringFilterItem的一部分),但我在SOF詢問是否存在更有效的機制。 – fgalan

+0

如果我是你,我會保留字符串並重新編譯它,以保證安全。它不可能是** regcomp **數字在您的系統的表現。或者,如果沒有同時使用的機會,我會危險地活着,並且使用'regex_t'的副本,假設它所維護的指針只被讀取,並且從哪裏來並不重要。你會得到的任何建議都是特定於實現的,並且可能會發生變化。 –