このサイトについて |
はじめに |
正規表現クイックスタート |
正規表現チュートリアル |
置換文字列チュートリアル |
アプリケーションと言語 |
正規表現の例 |
正規表現リファレンス |
置換文字列リファレンス |
書籍レビュー |
印刷可能なPDF |
このサイトについて |
RSSフィードとブログ |
文字クラスの共通部分は、Java、JGsoft V2、およびRuby 1.9以降でサポートされています。これにより、2つの文字セットに存在する単一の文字に簡単に一致させることができます。この構文は次のとおりです。[class&&[intersect]]。共通部分をとる文字クラス内では、完全な文字クラス構文を使用できます。
共通部分をとるクラスに否定のキャレットが必要ない場合、JavaとRubyでは、ネストされた角かっこを省略できます。[class&&intersect].
PowerGREPでは、ネストされた角かっこを省略することはできません。省略すると、PowerGREPはアンパサンドをリテラルとして解釈します。したがって、PowerGREPでは[class&&intersect]は、次のようにリテラルのみを含む文字クラスです。[clas&inter].
文字クラス[a-z&&[^aeiuo]]は、母音ではない単一の文字と一致します。言い換えれば、単一の子音と一致します。文字クラスの減算または共通部分がないと、これを行う唯一の方法は、すべての子音をリストすることです。[b-df-hj-np-tv-z].
文字クラス[\p{Nd}&&[\p{IsThai}]]は、タイ数字の単一の数字と一致します。[\p{IsThai}&&[\p{Nd}]]もまったく同じことを行います。
同じクラスを複数回共通部分をとることができます。[0-9&&[0-6&&[4-9]]]は、[4-6]と同じです。これらは共通部分の3つの部分すべてに存在する唯一の数字であるためです。JavaおよびRubyでは、同じ正規表現を次のように記述できます。[0-9&&[0-6]&&[4-9]], [0-9&&[0-6&&4-9]], [0-9&&0-6&&[4-9]]、または単に[0-9&&0-6&&4-9]。ネストされた角かっこは、共通部分のいずれかの部分が否定されている場合にのみ必要です。
共通部分の右側の部分の周りに角かっこを使用しない場合、文字クラスの残りの部分全体が共通部分の右側の部分であるという混乱はありません。角かっこを使用する場合は、次のように記述できます。[0-9&&[12]56]。Rubyでは、これは次と同じです。[0-9&&1256]。ただし、Javaには、これを次のように扱うバグがあります。[0-9&&56]、ネストされた角かっこを完全に無視します。
PowerGREPでは、ネストされたものの後に何も許可されていません]。文字56における[0-9&&[12]56]はエラーです。これにより、それらの意味についてあいまいさがなくなります。
また、正規表現の先頭または末尾に&&を配置しないでください。Rubyは[0-9&&]と[&&0-9]を、文字にまったく一致しない空のクラスとの共通部分として扱います。Javaは、先頭および末尾の&&演算子を無視します。PowerGREPは、それらをリテラルのアンパサンドとして扱います。
文字クラス[^1234&&[3456]]は、否定され、共通部分がとられています。JavaとPowerGREPでは、否定は共通部分よりも優先されます。JavaとPowerGREPはこの正規表現を「(1234ではない)かつ3456」と読みます。したがって、JavaとPowerGREPでは、このクラスは[56]と同じであり、数字の5と6と一致します。Rubyでは、共通部分が否定よりも優先されます。Rubyは[^1234&&3456]を「(1234と3456)ではない」と読みます。したがって、Rubyでは、このクラスは[^34]と同じであり、数字の3と4を除くすべてと一致します。
共通部分の右側を否定する場合は、角かっこを使用する必要があります。それらは自動的に優先順位を制御します。したがって、Java、PowerGREP、およびRubyはすべて[1234&&[^3456]]を「1234と(3456ではない)」と読みます。したがって、この正規表現は[12].
アンパサンドは、このチュートリアルで説明する他のどの正規表現フレーバーでも、文字クラス内で特別な意味を持ちません。アンパサンドは単なるリテラルであり、それを繰り返すと、不必要な重複が追加されるだけです。これらのフレーバーはすべて[1234&&3456]を[&123456].
と同一として扱います。厳密に言えば、これは、文字クラスの共通部分構文が他のほとんどの正規表現フレーバーと互換性がないことを意味します。ただし、実際には違いはありません。単にリテラルのアンパサンドを追加したい場合に、文字クラスで2つのアンパサンドを使用する意味がないためです。単一のアンパサンドは、Java、Ruby、およびPowerGREPによってもリテラルとして扱われます。
| クイック スタート | チュートリアル | ツール & 言語 | 例 | リファレンス | 書籍レビュー |
| はじめに | 目次 | 特殊文字 | 印刷不可能な文字 | 正規表現エンジンの内部構造 | 文字クラス | 文字クラスの減算 | 文字クラスの共通部分 | 省略形文字クラス | ドット | アンカー | 単語境界 | 選択 | オプション項目 | 繰り返し | グループ化とキャプチャ | 後方参照 | 後方参照、その2 | 名前付きグループ | 相対後方参照 | ブランチリセットグループ | 自由な空白とコメント | Unicode | モード修飾子 | アトミックグループ化 | 所有格量指定子 | 先読みと後読み | 先読みと後読み、その2 | マッチからテキストを除外する | 条件 | バランスグループ | 再帰 | サブルーチン | 無限再帰 | 再帰と量指定子 | 再帰とキャプチャ | 再帰と後方参照 | 再帰とバックトラッキング | POSIXブラケット式 | ゼロ長の合致 | 継続的な合致 |
ページURL: https://regular-expressions.dokyumento.jp/charclassintersect.html
ページの最終更新日: 2019年11月22日
サイトの最終更新日: 2024年3月15日
Copyright © 2003-2024 Jan Goyvaerts. All rights reserved.