クイック スタート
チュートリアル
ツールおよび言語
リファレンス
書籍レビュー
正規表現ツール
grep
PowerGREP
RegexBuddy
RegexMagic
一般的なアプリケーション
EditPad Lite
EditPad Pro
言語およびライブラリ
Boost
Delphi
GNU (Linux)
Groovy
Java
JavaScript
.NET
PCRE (C/C++)
PCRE2 (C/C++)
Perl
PHP
POSIX
PowerShell
Python
R
Ruby
std::regex
Tcl
VBScript
Visual Basic 6
wxWidgets
XML Schema
Xojo
XQuery & XPath
XRegExp
データベース
MySQL
Oracle
PostgreSQL
このサイトの詳細
はじめに
正規表現クイックスタート
正規表現チュートリアル
置換文字列のチュートリアル
アプリケーションと言語
正規表現の例
正規表現リファレンス
置換文字列リファレンス
書籍レビュー
印刷可能な PDF
このサイトについて
RSS フィードおよびブログ
RegexBuddy—The best regex editor and tester for POSIX developers!

POSIX の基本正規表現

POSIX または「UNIX のポータブルオペレーティングシステムインターフェイス」は、(UNIX)オペレーティングシステムがサポートするいくつかの機能を定義する標準のコレクションです。これらの標準の 1 つは、2 つの種類の正規表現を定義しています。grep や egrepなどの正規表現を含むコマンドは、POSIX 準拠 UNIX システムでこれらの種類を実装します。いくつかのデータベースシステムでも POSIX 正規表現を使用しています。

基本正規表現または BRE の種類は、従来の UNIX grep コマンドで使用される種類に似た種類を標準化しています。これは、今日でも使用されている最古の正規表現の種類です。この種類を際立たせることの 1 つとして、ほとんどのメタ文字には、メタ文字にその種類を与えるためにバックスラッシュが必要です。POSIX ERE を含むほとんどの他の種類では、メタ文字の意味を抑制するためにバックスラッシュを使用します。メタ文字にならない文字をエスケープするためにバックスラッシュを使用するのはエラーです。

BRE では、POSIX ブランケット表現がサポートされています。これは、他の正規表現の種類の文字クラスに似ていますが、いくつかの特別な機能があります。省略形はサポートされていません。一般的なメタ文字を使用する他の機能には、改行以外の任意の文字に一致するドット、文字列の先頭と末尾に一致するキャレットとドル記号、およびトークンを 0 回以上繰り返すがあります。これらの文字を文字通りに一致させるには、バックスラッシュでエスケープします。

他の BRE メタ文字には、特別な意味を与えるためにバックスラッシュが必要です。その理由は、最も古いバージョンの UNIX grep ではこれらをサポートしていなかったからです。grep の開発者は、これらの文字をリテラル文字として使用できる既存の正規表現との互換性を維持したかったのです。BREa{1,2}に一致し、a{1,2}文字通り、a\{1,2\}に一致し、aまたはaa. いくつかの実装は\?\+を構文のオプションとしてサポートしますが\{0,1\}\{1,\}、ただし\?\+は POSIX スタンダードに含まれません。トークンはでグループ化できます。\(\)は通常の\1から\9までです。最大で 9 個のグループが許可されます。たとえば\(ab\)\1に一致し、ababです。一方(ab)\1は無効になります。これは、参照されるバックリファレンスに対するキャプチャリンググループが存在しないためです。\1を使って\\1をそのまま\1に一致します。

POSIX BRE はその他の機能をサポートしていません。 alternation さえもサポートしていません。

POSIX Extended Regular Expressions

Extended Regular Expressions または ERE フレーバーは、UNIX の egrep コマンドで使用されるフレーバーに似たフレーバーを標準化します。「拡張」は、括弧式、ドット、キャレット、ドル記号、アスタリスクのみを使用した元の UNIX grep に関連しています。ERE は、これらの記号を BRE と同じようにサポートします。最新の多くの正規表現フレーバーは、ERE フレーバーの拡張です。現在の基準では、POSIX ERE フレーバーはかなり貧弱です。POSIX 基準は 1986 年に定義され、それ以来、正規表現は大幅に進歩しました。

egrep の開発者は grep との互換性を維持しようとはせず、代わりに別のツールを作成しました。したがって、egrep と POSIX ERE はバックスラッシュなしで追加のメタ文字を追加します。最新の正規表現フレーバーと同様に、バックスラッシュを使ってすべてのメタ文字の意味を削除できます。メタ文字ではない文字をエスケープすると、エラーになります。

修飾子?, +, {n}, {n,m}{n,}は、それぞれ前述のトークンをゼロまたは 1 回、1 回以上、n 回、n 回から m 回、n 回以上繰り返します。 Alternation は通常のバーでサポートされています|。飾り気のない括弧はグループを作成します。たとえば(abc){2}に一致し、abcabcです。POSIX 基準はバックリファレンスを定義していません。実装によってはサポートしていますが\1から\9は ERE の基準には含まれません。ERE は、POSIX BRE ではなく古い UNIX grep の拡張です。

拡張はこの範囲内に完全に収まります。

POSIX ERE の Alternation は最長一致を返します

alternationに関するチュートリアル トピックで、正規表現エンジンは一致する代替が検出されるとすぐに停止すると説明しました。ただし、POSIX 基準では最長一致を返すことが求められています。適用するとSet|SetValueSetValueを適用した場合、POSIX 準拠の正規表現エンジンはSetValue全体に一致します。エンジンがregex 指向 NFA エンジンであっても、POSIX では、すべての代替策を試行し、この場合SetValueを返して、DFA テキスト指向一致をシミュレートする必要があります。従来の NFA エンジンはSetに一致します。これは、この Web サイトで説明するすべてのその他の正規表現フレーバーと同様です。

POSIX 準拠のエンジンでも、依然として最左一致を検索します。適用する場合Set|SetValueSet or SetValueを適用すると、Setに一致します。正規表現が有効な一致を検出できる文字列内の最左位置は最初の位置です。文字列内のさらに後方に一致が見つかってもそれは関係ありません。正規表現を 2 回目に適用して、文字列内の最初のスペースから続行するとSetValueに一致します。従来の NFA エンジンはSet文字列の最初の文字で最初のマッチを行い、Set文字列の3番目の単語の最初の文字で2番目のマッチを行います。

| クイック スタート | チュートリアル | ツール & 言語 |  | リファレンス | 書籍レビュー |

| grep | PowerGREP | RegexBuddy | RegexMagic |

| EditPad Lite | EditPad Pro |

| Boost | Delphi | GNU (Linux) | Groovy | Java | JavaScript | .NET | PCRE (C/C++) | PCRE2 (C/C++) | Perl | PHP | POSIX | PowerShell | Python | R | Ruby | std::regex | Tcl | VBScript | Visual Basic 6 | wxWidgets | XML スキーマ | Xojo | XQuery & XPath | XRegExp |

| MySQL | Oracle | PostgreSQL |