2012-02-17 67 views
-1

我有要求存儲在平面文件正則表達式和讀them.There將正則表達式1000(我的意思是1000線3的正則表達式模式的每個在由分隔符分隔一行說#)。 而第一個正則表達式1是十六進制類型,其他2是整數。正則表達式/ C++

平面文件將有

regex1的#regex2#regex3

我現在已經2要求 1)我想如果正則表達式是無效拋出一個錯誤。 這通過regcomp函數即時通訊,這基本上會檢查它是否是一個正確的正則表達式(如缺少括號和所有)。

2)我有更多的一個要求,其中我需要有效的所有可能的值,其可以衍生,並且如果操作者輸入在文件中的條目錯誤引發錯誤的正則表達式。

如何能實現我的第二個進球是我的第二個問題

意義

說regex1的可以以十六進制表示的,但它可以通過多種方式來表示,我KNW的regex1的,regex2和regex3的長度但我想知道它們是否是有效的正則表達式。

基本上總之我想KNW有沒有用C regex庫什麼,這將驗證我的正則表達式。

+0

當你想要一個C庫時,爲什麼這個標記爲C++? – PlasmaHH 2012-02-17 15:45:58

+0

C和C++的任何解決方案shuld除了提升庫 – user1216529 2012-02-17 16:05:03

回答

0

我已經與pcre有很大的運氣。它是輕量級的,簡單的C代碼,它可以很好地處理正則表達式解析,而且速度也非常快。

+0

我使用regcomp函數來驗證基本的正則表達式,我可以使用regexec實際檢查匹配請求字符串的模式,但我無法找到任何功能,這將告訴我的模式本身是否有效模式或not.This是我的查詢 – user1216529 2012-02-17 16:07:18

+0

如果'regcomp()'檢測到一個無效的RE,它可能會返回'REG_BADPAT',或者它可能返回一個錯誤代碼tha更準確地描述錯誤。 http://pubs.opengroup.org/onlinepubs/009695399/functions/regcomp.html – StilesCrisis 2012-02-17 16:46:05

+0

如果這不是你要找什麼,你是什麼意思「的有效模式」是什麼意思? – StilesCrisis 2012-02-17 16:46:45

1

我會用這個升壓::正則表達式,如果你不介意使用外部庫。它有許多方法來驗證正則表達式,並且通常會拋出異常,說明您嘗試使用的表達式的時間是無效的。

http://www.boost.org/doc/libs/1_32_0/libs/regex/doc/basic_regex.html

+0

謝謝你的答案,但..我被迫不使用提升:(由於一些限制 – user1216529 2012-02-17 15:37:09

+0

'std :: regex'然後? – wilhelmtell 2012-02-17 15:55:45

+0

是的同意即時通訊使用只是但我使用regcomp函數來驗證基本正則表達式,我可以使用regexec來實際檢查匹配請求字符串的模式,但我找不到任何函數會告訴我模式本身是否是有效模式或不是。這是我的查詢 – user1216529 2012-02-17 16:09:12