
一口に正規表現と言っても、準拠する規格、機能の範囲、挙動の仕方は、ツール(アプリ)ごと、プログラミング言語ごとに、千差万別です。元々はテキストエディタの便利な機能として開発された正規表現ですが、徐々に拡張されてきて、アプリや言語によって、その取り入れの程度、範囲に違いがあるからです。Linuxコマンドも、POSIX*1が定める基本正規表現(BRE)と拡張正規表現(ERE)のどちらを採用しているかの違いがあり、また、採用する規格が同じでも、正規表現への対応には細かい違いがあります。同じコマンドであっても、Linux版、BSD版、macOS版で動作の違いが見られます。ロケール設定という環境設定も、正規表現の挙動に影響します。
先日、正規表現 \d(「バックスラッシュ」と「d」の組み合わせ)のことをブログ記事にしました。LibreOfficeのWriterで、\dを使えば、文書内のすべての郵便番号の着色が一発でできるという記事です(2026年2月10日付け記事「マンガでわかる正規表現」)。
この\dというのは、何らかの数字に当てはまる正規表現です。文字クラス[0-9]の略記法です(アプリ、言語によっては、[0-90-9]の全角数字にも当てはまります。)。
アプリやプログラミング言語の多くで採用されている、なかなか便利な書き方ですが、すべての環境で通用するわけではありません。
ということで、テキストデータ処理が得意なプログラミング言語AWK(オーク)で、これを試してみました。そうしたら、エラーとなって実行できませんでした。AWKは古くに開発された言語ですし、POSIXにかなり忠実に準拠しているので、\dというのは定義されていないのです(その一方で、\tなどといったエスケープシーケンスは使えるのが紛らわしく感じられますが。)。
ですから、AWKにおいては、[0-9]と書くべきです。それと、POSIX文字クラスの[[:digit:]]という書き方もできます。
ちなみに、AWKで採用する正規表現は拡張正規表現(ERE)の方です。AWKで正規表現を使えば、それは当然に(オプション指定等をすることなく)、EREとなります。
最後に、大事なことを付け足しておきます。AWKで正規表現を利用するときは、AWKの処理系が重要です。というのも、mawk と gawk とで、日本語への対応が異なるからです。mawk ですと、正規表現での日本語データの処理はできません。gawkだと、それが可能です。ですから、日本語データを扱うのであれば、gawkが必要です。
それではまた次の記事で。
goosyun
*1:ウィキペディアからの引用
POSIX(ポジックス、英: Portable Operating System Interface)は、オペレーティングシステム (OS) の標準的なインタフェースおよび環境を定義するIEEE規格である。ソースコードレベルでの移植性の高いアプリケーションソフトウェアの開発を容易にすることを目的として、主にUNIX系のOSに関して、各OSが共通して持つべきコマンドラインインタプリタ(シェル)、共通のユーティリティプログラム、およびアプリケーションプログラミングインタフェース (API) について定めている。
