Regex ツール |
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 フィード & ブログ |
Delphi XE は、正規表現の組み込みサポートを備えた最初の Delphi リリースです。ほとんどの場合、RegularExpressions ユニットを使用します。このユニットは、.NET フレームワークの正規表現クラスを模倣した一連のレコードを定義します。 .NET と同様に、明示的なメモリ管理なしに、1 行のコードで正規表現を使用できます。
内部的には、RegularExpressions ユニットは、TPerlRegEx クラスを定義する RegularExpressionsCore ユニットを使用します。 TPerlRegEx は、この Web サイトの作成者が開発したオープンソースの PCRE ライブラリ のラッパーです。したがって、RegularExpressions ユニットと RegularExpressionsCore ユニットの両方が PCRE 正規表現フレーバーを使用します。
RegularExpressions ユニットは以下を定義しますTRegEx, TMatch, TMatchCollection, TGroup、およびTGroupCollectionをクラスではなくレコードとして。つまり、呼び出す必要はありません。CreateおよびFreeメモリを割り当てたり解放したりするために。
TRegExは、同じ正規表現を複数回使用したい場合に呼び出すことができる Create コンストラクターがあります。そのようにするとTRegEx同じ正規表現を 2 回コンパイルしません。コンストラクターを呼び出すと、正規表現をパラメーターとして取らない非静的メソッドを呼び出すことができます。コンストラクターを呼び出さない場合は、正規表現をパラメーターとして取る静的 (クラス) メソッドのみを呼び出すことができます。すべてTRegExメソッドには、静的および非静的のオーバーロードがあります。どれを使用するかは、TRegExを使用して同じ正規表現を複数回呼び出すかどうかによってのみ異なります。
IsMatch メソッドは文字列を受け取り、正規表現が文字列の (一部) に一致するかどうかを示す True または False を返します。
Match メソッドは文字列を受け取り、最初のマッチの詳細を含むTMatchレコードを返します。一致に失敗した場合は、TMatchを持つSuccessプロパティがnilに設定されたレコードを返します。 の非静的オーバーロードMatch()は、入力文字列の一部のみを検索するために使用できる、オプションの開始位置とオプションの長さパラメーターを受け取ります。
Matches メソッドは文字列を受け取り、TMatchCollectionレコードを返します。デフォルトItem[]このレコードのプロパティは、正規表現が文字列内で見つけた各一致に対して、TMatchを保持します。一致がない場合、返されたCountプロパティはTMatchCollectionレコードはゼロです。
Replace メソッドを使用して、文字列内のすべての一致を検索して置換します。 JGsoft 置換テキストフレーバーを使用して、置換テキストを文字列として渡すことができます。または、TMatchEvaluatorを渡すことができます。これは、Matchという名前の 1 つのパラメーターをTMatchタイプで受け取り、文字列を返すメソッドにすぎません。メソッドによって返される文字列は、リテラル置換文字列として使用されます。文字列内の後方参照を、TMatchEvaluatorオーバーロードを使用するときに置換したい場合は、提供されたResultメソッドをMatchパラメーターで呼び出してから、文字列を返します。
Split メソッドを使用して、正規表現の一致に沿って文字列を分割します。結果は、文字列の動的配列として返されます。 .NET と同様に、正規表現内の キャプチャ グループによって一致したテキストも、返される配列に含まれます。これが気に入らない場合は、正規表現からすべての 名前付きキャプチャ グループを削除し、roExplicitCaptureオプションを渡して、番号付きのキャプチャ グループを無効にします。 の非静的オーバーロードSplit()は、返される配列が持つことができる要素の最大数を示すオプションのCountパラメーターを受け取ります。言い換えれば、文字列は最大Count-1回分割されます。キャプチャ グループの一致はカウントに含まれません。したがって、正規表現にキャプチャ グループがある場合、返される配列にはCount以上の要素が含まれる場合があります。渡す場合Count、2 番目のオプションのパラメーターを渡して、文字列の分割を開始する位置を示すことができます。開始位置より前の文字列の部分は、返される配列の最初の要素で分割されずに返されます。
TMatch レコードには、一致に関する詳細を含むいくつかのプロパティが用意されています。Successは、一致が見つかったかどうかを示します。これが False の場合、他のすべてのプロパティとメソッドは無効です。Valueは、一致した文字列を返します。IndexおよびLengthは、入力文字列内の位置と一致の長さを示します。Groupsは、デフォルトのTGroupプロパティにItem[]を格納する TGroupCollection レコードを返します。数値インデックスを使用してItem[]番号付きのキャプチャ グループ、および 名前付きキャプチャ グループには文字列インデックスを使用できます。
TMatch には、2 つのメソッドも用意されています。NextMatchは、これに続く正規表現の次のマッチを返します。お使いのTMatchがTMatchCollectionの一部である場合、NextMatchを使用して次のマッチを取得するのではなく、TMatchCollection.Item[]を代わりに検索を繰り返さないようにするために使用する必要があります。TMatch.Resultは、JGsoft 置換テキストフレーバーを使用して、置換テキストを文字列として持つ 1 つのパラメーターを取ります。この一致がTRegEx.Replace.
TGroup レコードにはSuccess, Value, IndexおよびLengthプロパティがあり、TMatch.
のプロパティと同様に機能します。Delphi XE5 以前では、TRegEx は常に長さゼロの一致をスキップします。これは Delphi XE6 で修正されました。XE5 以前では、RegularExpressionsCore.pas を変更して、次の行を削除することで、同じ修正を行うことができます。State := [preNotEmpty]からTPerlRegEx.Create。この変更は、Stateプロパティを設定せずに TPerlRegEx を直接使用するコードにも影響します。
TPerlRegEx は、Embarcadero が Delphi XE に含めるためのライセンスを取得するずっと前から利用可能でした。必要に応じて、Delphi 2010 以前で使用するために 2 つのバージョンのいずれかをダウンロードできます。
最新リリースの TPerlRegEx は、Delphi XE の RegularExpressionsCore ユニットと完全に互換性があります。Delphi 2010 以前で記述された新しいコードでは、最新リリースの TPerlRegEx を使用することを強くお勧めします。後でコードを Delphi XE に移行する場合は、ユニットの uses 句で PerlRegEx を RegularExrpessionsCore に置き換えるだけです。
古いバージョンの TPerlRegEx は、非表示のコンポーネントです。つまり、TPerlRegEx をコンポーネントパレットに置き、フォームにドロップできます。元の TPerlRegEx は、Borland の目標がコンポーネントパレット上のすべてにコンポーネントを持つことだったときに開発されました。
古いバージョンの TPerlRegEx から最新の TPerlRegEx に移行する場合は、フォームまたはデータモジュールに配置した可能性のある TPerlRegEx コンポーネントをすべて削除し、代わりに実行時にオブジェクトをインスタンス化することから始めます。実行時にインスタンス化する場合、Create()コンストラクターにオーナーコンポーネントを渡す必要はなくなりました。パラメーターを削除するだけです。
元の TPerlRegEx の一部のプロパティとメソッド名は少し扱いにくかったです。これらは最新の TPerlRegEx で名前が変更されました。基本的に、すべての識別子でSubExpressionはGroupおよびMatchedExpressionはMatchedに置き換えられました。変更された識別子の完全なリストを以下に示します。
古い識別子 | 新しい識別子 |
---|---|
StoreSubExpression | StoreGroups |
NamedSubExpression | NamedGroup |
MatchedExpression | MatchedText |
MatchedExpressionLength | MatchedLength |
MatchedExpressionOffset | MatchedOffset |
SubExpressionCount | GroupCount |
SubExpressions | Groups |
SubExpressionLengths | GroupLengths |
SubExpressionOffsets | GroupOffsets |
RegexBuddy または RegexMagic を使用して Delphi コード スニペットを生成する場合は、使用している (古い) Delphi のバージョンに関係なく、言語を「Delphi (TPerlRegEx)」に設定して古い識別子を使用するか、「Delphi XE (Core)」に設定して新しい識別子を使用します。
注意する必要があることの 1 つは、ここでダウンロードできる TPerlRegEx バージョンと、Delphi XE、XE2、XE3 に含まれるバージョンは UTF8String プロパティを使用しており、すべての Offset および Length プロパティはそれらの UTF-8 文字列へのインデックスであるということです。これは、当時 PCRE が UTF-8 のみをサポートしており、UTF8String を使用すると繰り返しの変換を回避できるためです。パフォーマンスが重要な場合は、これらのバージョンの Delphi で TRegEx の代わりに TPerlRegEx を使用する必要があります。データがすでに UTF-8 の場合は、UTF-8 を TPerlRegEx に直接渡すことができます。データが別のエンコーディングを使用している場合は、UTF-8 への変換がいつ発生するかを制御して、同じデータの繰り返し変換を回避できます。
Delphi XE4 および XE5 では、TPerlRegEx は UnicodeString (UTF-16) プロパティを持っていますが、依然として UTF-8 のオフセットと長さを返していました。Delphi XE6 では、Offset および Length プロパティが UTF-16 のオフセットと長さに変更されました。これは、文字列に非 ASCII 文字が含まれる場合、Offset および Length プロパティを使用する XE3 または XE6 で動作するコードが XE4 および XE5 では動作しないことを意味します。Delphi XE4 から Delphi 10 から 10.2 までは、PCRE がすでにネイティブの UTF-16 サポートを持っていたにもかかわらず、UTF-8 バージョンの PCRE を使用し続けました。これにより、UnicodeString の使用と相まって、UTF-16 と UTF-8 の間の絶え間ない変換が発生し、特に長い対象文字列では正規表現のパフォーマンスが大幅に低下する可能性があります。
Delphi 10.3 以降では、Windows プラットフォーム上で UTF-16 バージョンの PCRE を使用します。TRegEx および TPerlRegEx は、UTF-8 への変換なしに、すべてに UnicodeString を使用するようになりました。Delphi XE4 以降から 10.3 以降にアップグレードすると、TRegEx または TPerlRegEx を使用するあらゆるコードのパフォーマンスが確実に向上します。Delphi XE3 以前からアップグレードすると、すべてを UTF-8 で行っていた場合を除き、パフォーマンスが向上します。
Delphi Prism は、特に .NET フレームワークをターゲットとするために開発された Embarcadero の Delphi 言語のバリアントでした。Delphi Prism は Visual Studio IDE 内に存在しました。これは完全に .NET フレームワークに基づいていました。Delphi Prism では、ユニットの uses 句に System.Text.RegularExpressions 名前空間を追加するだけで済みました。その後、Regex、Match、Group などの .NET 正規表現クラスにアクセスできました。これらは、C# および VB 開発者が使用できるのと同じように Delphi Prism で使用できました。
Delphi 8、2005、2006、および 2007 には、WinForms および VCL.NET アプリケーションを開発するための Delphi for .NET コンパイラが含まれていました。Delphi for .NET は、Delphi のバージョンに応じて .NET 1.1 または 2.0 のみをサポートしていましたが、それでも .NET の完全な正規表現サポートを使用できました。System.Text.RegularExpressions 名前空間をユニットの uses 句に追加するだけで、すべての .NET 正規表現クラスにアクセスできるようになりました。
| クイックスタート | チュートリアル | ツールと言語 | 例 | リファレンス | 書籍レビュー |
| 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 |
ページ URL: https://regular-expressions.dokyumento.jp/delphi.html
ページ最終更新日: 2021年8月24日
サイト最終更新日: 2024年3月15日
Copyright © 2003-2024 Jan Goyvaerts. All rights reserved.