クイックスタート
チュートリアル
ツールと言語
リファレンス
書籍レビュー
正規表現ツール
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フィードとブログ

Just Great Software 正規表現エンジン

Just Great Software (JGsoft) 正規表現エンジンは、この正規表現チュートリアルの著者でもあるJan Goyvaertsによって設計・開発されました。このエンジンは、Just Great Software製品であるPowerGREP (バージョン3以降)、RegexBuddy (バージョン2以降)、RegexMagic (全バージョン) のコアとなっています。また、EditPad Pro (バージョン6以降)、EditPad Lite (バージョン7以降)、AceText (バージョン2以降) の正規表現検索機能もこのエンジンによって実現されています。

このエンジンとその正規表現フレーバーは、PowerGREP、RegexBuddy、RegexMagic向けに特別に開発されました。JGsoftフレーバーは、最も一般的な正規表現フレーバーのすべての機能を組み合わせたものです。Unicodeと幅広いレガシーコードページを完全にサポートしています。PowerGREP (バージョン3以降) とEditPad Pro (バージョン7以降) のエンジンは、ファイルを任意のチャンクに分割することなく、4GBを超えるファイルを処理できます。

RegexBuddyとRegexMagicには、他の多くの正規表現フレーバーの制限とフレーバー固有の機能をシミュレートできるJust Great Softwareエンジンの特殊バージョンがあります。RegexBuddyまたはRegexMagicで正規表現フレーバーを選択すると、すべての機能でそのフレーバーが使用されます。組み込みのgrepでさえもです。

Just Great Softwareエンジンは、他のアプリケーションに組み込むことができるコンポーネントとしては提供されていません。これは、汎用エンジンとしてではなく、Just Great Software製品内で動作するように特別に設計されています。正規表現がコア機能であるPowerGREPやRegexBuddyのようなツールを開発していない限り、開発環境で既に提供されている正規表現フレーバーで十分です。ユーザーのために、アプリケーションが使用する正規表現フレーバーを明確に示してください。そうすれば、ユーザーはこのサイトで詳細を簡単に調べることができます。

JGsoft V2

PowerGREP 5では、JGsoft正規表現フレーバーのメジャーアップデート版であるJGsoft V2が導入されました。このフレーバーは、RegexBuddy 4とRegexMagic 2でアプリケーションとしてPowerGREP 5を選択した場合にも使用できます。JGsoft V2には、いくつかの重要な新機能が追加されています。また、いくつかの破壊的な変更も含まれています。

JGsoft V2は、.NET正規表現フレーバーのようなバランスグループと、PerlやPCREのような分岐リセットグループをサポートするようになりました。また、JavaやRubyのような[class&&[intersect]]構文を使用した文字クラスの共通部分も新しく追加されました。ネストされた角括弧のペアが必要です。JGsoft V2は、[class&&intersect]構文をサポートしていません。これは、[class&&intersect&&again]のように記述してしまう可能性があり、JavaとRubyでは予期しない動作をするためです。

PerlとPCREでは、\Kを使用して、後読みの制限を回避するためにテキストを一致から除外することができます。JGsoft V2では後読みが無制限であるため\Kは実際には必要ありませんが、PerlやPCREで正規表現を記述するのに慣れている場合は、JGsoft V2で\Kを使用できるようになりました。

Perl、PCRE、Rubyはすべて、正規表現の再帰サブルーチンをサポートしています。これら3つは、互いに構文をコピーしているため、再帰とサブルーチンを記述する方法は複数あります。しかし、これら3つは互いに一致動作をコピーしていないため、構文は似ていても動作に明らかな違いがあります。JGsoft V2は、再帰とサブルーチン呼び出し用に3種類の構文を提供しています。それぞれの構文は、これら3つのフレーバーのいずれかの動作に従います。PCREと同様に、(?P>name)キャプチャせずキャプチャグループを元に戻しアトミックです。この構文は、アトミックグループの構文との類似性から覚えることができます。PCREとは異なり、JGsoft V2は(?P>1)(?P>0)もサポートしているため、番号付き呼び出しと再帰に対してこの動作を指定できます。Perlと同様に、(?R), (?1)(?&name)キャプチャせずキャプチャグループを元に戻しバックトラックを許可します。この構文は、Perlコードの&subroutine();呼び出しで使用されるアンパサンドによって覚えることができます。最後に、Rubyと同様に、\g<0>, \g<1>\g<name> は、サブルーチン呼び出しの一致をキャプチャし、キャプチャグループを元に戻さずバックトラックを許可します。この構文は、Rubyの正規表現フレーバーが再帰とサブルーチン呼び出しのための他の構文をサポートしていないという事実によって覚えることができます。

\hは、水平方向の空白文字の新しい省略形文字クラスです。スペース、タブ、および改行と段落区切りを除くすべてのUnicode空白文字が含まれます。\vは、以前は垂直タブに一致するエスケープでした。現在は、\vは垂直方向の空白文字の省略形です。これには、垂直タブ、改行、改ページ、段落区切りが含まれます。\vは、CRとLFを個別に一致させます。\H\Vは、これら2つの新しい省略形の否定形です。

\Rは、Unicode改行を含むあらゆる改行に一致する新しい特殊エスケープです。このエスケープの特別な点は、CRLFペアを不可分なものとして扱うことです。\Rの一致試行が文字列内のCRLFペアの前に始まる場合、1つの\RがCRLFペア全体に一致します。\Rは、CRLFペアのCRのみを一致させるためにバックトラックしません。そのため、\Rは単独のCRまたは単独のLFに一致させることができますが、\R{2}は単一のCRLFペアに一致させることはできません。

\l\uは、\p{Ll}\p{Lu}の省略形になりました。これらは、Unicodeの小文字または大文字に一致します。これらのトークンは常に大文字と小文字が区別されます。

POSIXクラスは、[[:alpha:]]の表記を使用して、ASCII文字のみに一致します。\p{Alpha}の表記は、Unicode文字にも一致します。[[:d:]], [[:s:]], [[:w:]], [[:l:]][[:u:]]は、[[:digit:]], [[:space:]], [[:word:]], [[:lower:]][[:upper:]]は、廃止されました。これらは、\d, \s, \w, \l\u.

\l\uのASCII専用バージョンとして扱うことができます。XML省略形文字クラスになりました。\cAから\cZは、制御文字エスケープとしてサポートされなくなりました。

8進エスケープは、\o{377}と記述する必要があります。8進数は、\o{0}からから\o{177777}\0377までの範囲です。以前の\377構文はエラーになります。JGsoftフレーバーは、後方参照の構文と混同しやすいため、\0をサポートしたことがありません。もエラーになり、リテラルゼロとは一致しなくなりました。\x00

を使用して、ヌルバイトと一致させます。置換文字列構文は、これを可能にするために**置換文字列条件式**で拡張されました。(?1matched:unmatched)は、最初のキャプチャグループが一致に参加した場合はmatchedを、参加しなかった場合はunmatchedを挿入します。正規表現の条件式と同様に、長さゼロの一致を見つけたキャプチャグループは参加したとみなされます。名前付きキャプチャグループを使用する場合は、(?{name}matched:unmatched)を使用して、置換文字列条件式でそれらを参照できます。ネストされた条件式を含む、置換文字列構文全体を条件式内で使用できます。条件式が置換文字列の末尾にある場合は、括弧を省略できます。置換文字列条件式の構文は、C++ Boostライブラリの構文と同じです。唯一の違いは、Boostは置換文字列内の任意の場所でグループ化に括弧を使用しますが、JGsoft V2は条件式の周囲でのみ括弧を認識することです。こうすることで、リテラルの括弧をエスケープする必要がなくなります。存在しないグループを参照する条件式は、JGsoft V2ではエラーになります。Boostでは、「unmatched」テキストが挿入されます。

この構文を追加した結果、JGsoft V2は\?, \:, \(\)`\`

| クイックスタート | チュートリアル | ツールとプログラミング言語 |  | リファレンス | 書籍レビュー |

| 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 |