2012年7月13日金曜日

正規表現に悩む

仕事で正規表現を使って検索しようと思ってます。

C/C++言語でソースとかヘッダにあるプリプロセッサからシンボル定義だけを
抽出したいのだけど方法がよくわからなかった。
もっと詳細に書くと、以下のようなコードがあって、シンボル定義だけ抽出したい。
TESTとTHANKYOUは値があるから抽出したくない場合の話。

#define PREPROCESS_A
#define TEST 1
#define THANKYOU 39108
#define PREPROCESS_B // シンボル定義ですよ
#define PREPROCESS_C //これもシンボル定義です。タブ1個
#define PREPROCESS_D /* こんなシンボル定義もあるよね。タブ2個 */
#define PREPROCESS_E /* ここまで出来たら全部抽出できるのでは?半角スペース2個 */

正規表現のサンプル集を調べてみたり、
NoEditorのGrep機能使ったりして、とりあえずNoEditorのGrepでは
以下の方法で抽出できた。
でも、一回ですべての抽出が出来なかったので、もう少し調べようと思う。

PREPROCESS_Aだけを抽出する正規表現
(#define [\w]+)[\x20\t]*$

PREPROCESS_B~PREPROCESS_Eまでを抽出する正規表現
(#define [\w]+)[\x20\t]*[//|/\*]