2007-02 / 2007-02-09

前のエントリ: 前回のマッチ位置から処理する [正規表現]
次のエントリ: 一蘭 [diary]

置換時に式を評価する
2007-02-09-3 / カテゴリ: [perl][正規表現] / [permlink]

/e で。割とよく使われてるはずだからサンプルだけ
C/C++ ソースの #ifdef を削る。
@define = qw/__DEBUG __WRITELOG/; # define を指定する

# $src にソースを丸ごとつっこむ

# #if-#endif
$src =~ s|^#if\s+(\w+)(.*?)^(#else(.*?))?^#endif|($1)?$2:$4|emsg;
# #ifdef-#endif
$src =~ s|^#ifdef\s+(\w+)(.*?)^(#else(.*?))?^#endif|(grep {$_ eq $1 } @define)?$2:$4|emsg;
# #ifndef-#endif
$src =~ s|^#ifndef\s+(\w+)(.*?)^(#else(.*?))?^#endif|(grep {$_ eq $1 } @define)?$4:$2|emsg;
/m で複数行マッチ、/s で . を改行にマッチさせる。
/m で複数行マッチ処理を行ってる場合、式の途中の ^ は改行直後の位置にマッチする。
else 節がない場合は $4 は空になるのでバッサリ削られる。
前のエントリ: 前回のマッチ位置から処理する [正規表現]
次のエントリ: 一蘭 [diary]

2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12

最終更新時間: 2013-05-02 16:12