クイックスタート
チュートリアル
ツールと言語
リファレンス
書評
正規表現チュートリアル
はじめに
目次
特殊文字
非印刷文字
正規表現エンジンの内部動作
文字クラス
文字クラスの減算
文字クラスの積集合
短縮文字クラス
ドット
アンカー
単語境界
オルタネーション
オプション項目
繰り返し
グループ化とキャプチャ
バックリファレンス
バックリファレンス、パート2
名前付きグループ
相対バックリファレンス
ブランチリセットグループ
フリースペースとコメント
Unicode
モード修飾子
アトミックグループ化
所有格量子化子
先行アサーションと後行アサーション
ルックアラウンド、パート2
マッチからテキストを除外する
条件式
バランスグループ
再帰
サブルーチンプロセス
無限再帰
再帰と量子化子
再帰とキャプチャ
再帰とバックリファレンス
再帰とバックトラッキング
POSIXブラケット式
ゼロ長マッチ
マッチの継続
このサイトについて、さらに
はじめに
正規表現クイックスタート
正規表現チュートリアル
置換文字列チュートリアル
アプリケーションと言語
正規表現の例
正規表現リファレンス
置換文字列リファレンス
書評
印刷可能なPDF
このサイトについて
RSSフィードとブログ
RegexBuddy—Better than a regular expression tutorial!

短縮文字クラス

特定の文字クラスは頻繁に使用されるため、一連の短縮文字クラスが用意されています。\dは、次の略記です。[0-9]Unicodeをサポートするほとんどのフレーバーでは、\dすべてのスクリプトからのすべての数字が含まれます。注目すべき例外はJavaJavaScript、およびPCREです。これらのUnicodeフレーバーは、\d.

\wは「単語文字」を表します。常にASCII文字[A-Za-z0-9_]に一致します。アンダースコアと数字が含まれていることに注意してください。Unicodeをサポートするほとんどのフレーバーでは、\w他のスクリプトの多くの文字が含まれています。実際にどの文字が含まれるかは、多くの矛盾があります。アルファベットスクリプトの文字と数字、およびイデオグラムは一般的に含まれています。アンダースコア以外の接続句読点と、数字ではない数値記号は、含まれる場合と含まれない場合があります。XMLスキーマXPathは、\wのすべての記号を含んでいます。繰り返しますが、JavaJavaScript、およびPCREは、\w.

\sは「空白文字」を表します。これも、実際にどの文字が含まれるかは正規表現のフレーバーによって異なります。このチュートリアルで説明するすべてのフレーバーでは、[ \t\r\n\f]が含まれています。つまり\sは、スペース、タブ、キャリッジリターン、ラインフィード、またはフォームフィードに一致します。ほとんどのフレーバーには垂直タブも含まれていますが、Perl(バージョン5.18以前)とPCRE(バージョン8.34以前)は注目すべき例外です。Unicodeをサポートするフレーバーでは、\s通常はUnicodeの「セパレータ」カテゴリからのすべての文字が含まれます。JavaPCREは、再び例外です。しかしJavaScriptは、\s.

短縮文字クラスは、角括弧の内側と外側の両方で使用できます。\s\dは、空白文字の後に数字が続く文字列に一致します。[\s\d]は、空白文字または数字のいずれかである単一の文字に一致します。次のような文字列に適用すると1 + 2 = 3、前者の正規表現は2(スペース2)に一致しますが、後者は11[\da-fA-F]は16進数の数字に一致します。フレーバーがASCII文字のみに一致する場合、[0-9a-fA-F]と同じです。\d.

否定された短縮文字クラス

上記の3つの短縮形には、否定形もあります。\Dは次のと同じです。[^\d], \Wは、次の略記です。[^\w]そして\Sは次のと同等です。[^\s].

角括弧内で否定された短縮形を使用する際には注意が必要です。[\D\S]は、[^\d\s]と同じではありません。後者は、数字でも空白でもない任意の文字に一致します。これはxに一致しますが、8には一致しません。しかし、前者は、数字ではないか、空白ではないいずれかの文字に一致します。すべての数字は空白ではなく、すべての空白文字は数字ではないため、[\D\S]は、数字、空白、その他すべての文字に一致します。

その他の短縮文字クラス

へのサポート\d, \s、そして\wは非常に一般的ですが、追加の短縮文字クラスをサポートする正規表現フレーバーもあります。Perl 5.10では、\hそして\v. \hは水平方向の空白に一致します。これには、タブと「スペースセパレータ」Unicodeカテゴリのすべての文字が含まれます。これは次のと同じです。[\t\p{Zs}]. \vは「垂直方向の空白」に一致します。これには、Unicode標準で改行として扱われるすべての文字が含まれます。これは次のと同じです。[\n\cK\f\r\x85\x{2028}\x{2029}].

PCREも、バージョン7.2以降で\hそして\vをサポートしています。PHPはバージョン5.2.2以降、Javaはバージョン8以降、JGsoftエンジンはバージョン2以降でサポートしています。

フレーバーが\hそして\vをサポートしている場合は、\sの代わりに、常にそれらを使用する必要があります。\hの代わりに\sを使用してスペースとタブに一致させると、正規表現のマッチが誤って次の行に及ばないようにすることができます。

他の多くの正規表現フレーバーでは、\v垂直タブ文字のみに一致します。Perl、PCRE、およびPHPではこれがサポートされたことがないため、\vに別の意味を与えることができました。Java 4から7、およびJGsoft V1では、\vを使用して垂直タブのみに一致させていました。Java 8とJGsoft V2では、このトークンの意味が変更されました。垂直タブは垂直方向の空白文字でもあります。混乱を避けるため、上記の段落では\cKを使用して垂直タブを表しています。

Boostは、バージョン1.42以降で\hをサポートしています。Boost 1.42以降は、\vを文字クラスの外側でのみ短縮形としてサポートしています。[\v]はBoostでは垂直タブのみに一致します。

Ruby 1.9以降には独自のバージョンがあります。\hと同様に、16進数の数字1つに一致します。[0-9a-fA-F]. \vはRubyでは垂直タブです。

XML文字クラス

XMLスキーマXPath、およびJGsoft V2正規表現は、他の正規表現フレーバーではサポートされていない4つの短縮形をサポートしています。\iは、XML名の最初の文字になりうる任意の文字に一致します。\cは、XML名の最初の文字の後に発生する可能性のある任意の文字に一致します。\Iそして\Cは、それぞれ否定された短縮形です。制御文字構文は、他の多くの正規表現フレーバーで使用されているため、\c短縮構文と競合することに注意してください。

これらの4つの短縮形は、角括弧表記を使用して、文字クラスの内側と外側の両方で使用できます。XMLスキーマでXML参照と値を検証する場合に非常に役立ちます。正規表現\i\c*は、xml:schema.

のようなXML名に一致します。正規表現<\i\c*\s*>は、属性のない開始XMLタグに一致します。</\i\c*\s*>は任意の終了タグに一致します。<\i\c*(\s+\i\c*\s*=\s*("[^"]*"|'[^']*'))*\s*>は、任意の数の属性を持つ開始タグに一致します。すべてをまとめると、<(\i\c*(\s+\i\c*\s*=\s*("[^"]*"|'[^']*'))*|/\i\c*)\s*>属性付きの開始タグまたは終了タグのいずれかに一致します。

このチュートリアルで説明されている他の正規表現フレーバーでは、XML文字クラスはサポートされていません。XMLファイルがプレーンASCIIの場合、[_:A-Za-z]\iそして[-._:A-Za-z0-9]\cに使用できます。XML標準で許可されているすべてのUnicode文字を許可する場合は、かなり長い正規表現になります。代わりに\i使用する代わりに

[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]

を使用します。\c使用する代わりに

[-.0-9:A-Z_a-z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]