課題
正規表現には様々な種類が存在すると聞くが、基本として覚えるべき正規表現はどのようなものか知りたい。
解決策
POSIXの範囲内では以下の3種類の正規表現が存在する。 まずはこれらを学習すると良いのではないか。
種類 | 略称 |
---|---|
基本正規表現 | BRE (Basic Regular Expression) |
拡張正規表現 | ERE (Extended Regular Expression) |
AWK正規表現 | - |
POSIXの範囲内の代表的なコマンドとそれに対応している正規表現の例を以下に挙げる。
コマンド名 | 対応している正規表現 |
---|---|
grep (-E オプションなし) | BRE |
grep (-E オプションあり) | ERE |
sed | BRE |
AWK | AWK正規表現 |
※ sed において頻繁に利用される -r オプション(EREを利用するオプション)はPOSIXの範囲外
各正規表現において利用できる機能についての詳細な説明は割愛する。 各正規表現の違いについてのみ簡単に述べておく。
- BRE に対する ERE
- メタ文字「+」「?」「|」が利用できる
- メタ文字「(」「)」「{」「}」に関してバックスラッシュをつけない
- 後方参照「\n」が無保証(の実装がある)
- ERE に対する AWK正規表現
- メタ文字「{」「}」による繰り返し指定が利用できない
補足
POSIXの範囲内の正規表現は、例えば以下のような機能には対応していない。 POSIXの範囲から外れることを理解したうえで、対応するツールを利用して実現する必要がある。
- 単語境界
- 先後読み
- キャプチャ無しの括弧
- アトミックグループ/絶対最大量指定子
- 控えめなマッチ
所感
ひとえに正規表現と言っても様々な種類があるため混乱することが多い。 自身の環境でどのような正規表現が対応しているのか正しく把握したうえで利用することが重要であると思う。