上一頁 | 首頁

REGEX(3)        Linux程序員手冊         REGEX(3)

名稱
    regcomp、regexec、 regerror、 regfree - POSIX regex函數

摘要
    #include 
    #include 

    int regcomp(regex_t *preg, const char *regex, int cflags);

    int regexec(const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags);

    size_t regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size);

    void regfree(regex_t *preg);

說明
    POSIX Regex編譯
        regcomp()用于把正則表達式編譯成適于隨後regexec()所要搜索的形式。

        regcomp()的參數有:preg,一個指向存儲表達式的緩衝區的指針;regex,一個指向以null終止的字符串的指針;cflags,用于確定編譯類型的標志。

        所有正則表達式的搜索必須通過已編譯的表達式緩衝區。因此,regexec()總應得到已由regcomp()初始化的表達式緩衝區地址。

        cflags可以是以下一個或多個標志的按位或:

        REG_EXTENDED
            以POSIX擴展正則表達式語法來解析regex。若不設置,則使用POSIX基本正則表達式語法。

        REG_ICASE
            不區分大小寫。隨後使用此表達式的regexec()將會忽略大小寫。
        REG_NOSUB
            不必支持匹配子串的尋址。若所提供的表達式緩衝區以此標志來編譯,則忽略傳遞給regexec()的nmatch和pmatch參數。
        REG_NEWLINE
            匹配任意字符的操作符不匹配新行。
            不含換行符的非匹配列表([^...])不匹配換行符。
            不管regexec()的執行標志eflags是否包含REG_NOTBOL,匹配行首的操作符(^)也匹配緊接在換行符之後的空字符串。
            不管eflags是否包含REG_NOTEOL,匹配行尾的操作符($)也匹配後邊緊接著換行符的空字符串。
    POSIX Regex匹配
        regexec()用于匹配相應于預編譯表達式緩衝區preg的以null終止的字符串。nmatch和pmatch用于提供匹配位置方面的信息。eflags可以是以下所述的引致匹配行為改變的REG_NOTBOL和REG_NOTEL中的一個或兩個的按位或。
        REG_NOTBOL
            匹配行首的操作符總是不能匹配行首(但請參閱以上編譯標志REG_NEWLINE的說明)。此標志可用于一個字符串的不同部分傳遞給regexec(),並且字符串首不應被解析為首行的情況。
        REG_NOTEOL
            匹配行尾的操作符總是不能匹配行尾(但請參閱以上編譯標志REG_NEWLINE的說明)。

    字節偏移量
        除非為編譯表達式緩衝區設置了REG_NOSUB,否則可以獲得匹配子串的尋址信息。pmatch必須至少有nmatch個元素的大小。任何未使用的結構體成員的值將會設為-1。
        作為pmatch的類型,regmatch_t結構體定義于。
            typedef struct {
                regoff_t rm_so;
                regoff_t rm_eo;
            } regmatch_t;

    每個其值不是-1的rm_so元素指出字符串內的下一最大匹配子串的起始偏移量。相應地,rm_eo元素指出匹配子串中以第一個字符為參照的終止偏移量。

    Posix錯誤報告
        regerror()用于把由regcomp()和regexec()返回的錯誤碼轉換成錯誤信息字符串。

        regerror()接受以下參數:errcode,錯誤碼;preg,表達式緩衝區;errbuf,一個指向字符串緩衝區的指針;errbuf_size,字符串緩衝區的大小。它返回errbuf用于容納以null終止的錯誤信息字符串的大小。若errbuf與errbuf_size皆非零,errbuf將填以由大小為errbuf_size-1個字符的錯誤信息及null終止符組成的字符串的首址。

    釋放POSIX表達式緩衝區
        傳regfree()以預編譯表達式緩衝區preg,將釋放由編譯函數regcomp()分配的表達式緩衝區。

返回值
    若成功編譯,則regcomp()返回0;否則,返回錯誤碼。

    若成功匹配,則regexec()返回0;否則,返回REG_NOMATCH。

錯誤碼
    以下錯誤碼能由regcomp()返回:

    REG_BADBR
        非法使用後退標記操作符。

    REG_BADPAT
        非法使用諸如組或列表的表達式操作符。

    REG_BADRPT
        非法使用重復操作符。譬如:以“*”為第一個字符。

    REG_EBRACE
        不匹配的花括號間隔操作符。

    REG_EBRACK
        不匹配的方括號列表操作符。

    REG_ECOLLATE
        非法比較元素。

    REG_ECTYPE
        未知字符類型名。

    REG_EEND
        未明確的錯誤。POSIX.2尚未定義。

    REG_EESCAPE
        尾部出現反斜線符號。

    REG_EPAREN
        不匹配的圓括號組操作符。

    REG_ERANGE
        非法使用範圍操作符。譬如:範圍的終點比起點早出現。

    REG_ESIZE
        編譯過的正則表達式請求大于64Kb的表達式緩衝區。POSIX.2沒定義這種行為。

    REG_ESPACE
        regex例程耗盡內存。

    REG_ESUBREG
        子表達式的非法後退標記。

遵從
    POSIX.1-2001

另見
    grep(1)、regex(7)、GNU regex手冊

版權頁標志
    此頁是Linux man-pages項目3.19版的一部分。可以從http://www.kernel.org/doc/man-pages/找到有關此項目的描述及缺陷報告信息。

GNU         2008-05-29          REGEX(3)


版權 © 2024 石仔