ページ

2007年8月23日木曜日



regexといえば、Regular Expressionsで正規表現のことなのですが、今日はこれをC言語で使うときのポイントを。


regexの関連関数はmanでみると4つあります。




# man 3 regex



regcomp, regexec, regerror, regfreeです。


regcompはmanによると



正規表現をコンパイルして、regexec()での検索処理に適合する形態にする。



とか書いてますが、コンパイルなんてどうでもよくて、regexecを使う前の前処理と考えると良いと思います。対してregfreeは後処理で対で呼び出すことになります。


もう少し言うと、regcompで確保されたすべてのメモリを開放する処理になっています。


REG_EXTENDEDはPOSIXのRegex++, POSIX API Reference.をみると



モダンな正規表現をコンパイルする。



などと書いていますが、なんのことかサッパリです。


オライリーの正規表現にはBRE(Basic Regular Expressions:基本正規表現)とERE(Extended Regular Expressions:拡張正規表現)では




  • +および?量指定子が使える

  • 範囲、グループ化の'\'エスケープが不要

  • 後方参照がない

  • 選択がある


のようなことがかかれています。(はてなキーワードにも拡張正規表現が登録されていますね)


私はこちらを使うので、REG_EXTENDEDは指定しています。


また、regcompに与えるパターン文字列は'\'エスケープは"\\"としましょう。



例)\s+ → \\s+






あとはせっかくC言語で使うので早い正規表現をなるべく使うように努力します。


(せっかく文字列処理が楽になったので、ここに少し時間を割くのもよいでしょう?)





0 件のコメント:

コメントを投稿