このトピックでは、MySQL の where 句で正規表現を使用してデータ フィルタリングを制御する方法を学習します。
正規表現の概要
最初の 2 つの章のフィルタリングの例では、一致、比較、およびワイルドカード演算子を使用してデータを検索できます。基本的なフィルタリング (またはそれほど基本的ではないフィルタリング) の場合は、これで十分です。ただし、フィルター条件の複雑さが増すにつれて、where 句自体の複雑さも増します。
ここで正規表現が役に立ちます。正規表現は、テキストの照合に使用される特別な文字列 (文字のセット) です。テキスト ファイルから電話番号を抽出する場合は、正規表現を使用できます。名前の途中に数字が含まれるすべてのファイルを検索する必要がある場合は、正規表現を使用できます。テキストセクション内で繰り返される単語をすべて検索したい場合は、正規表現を使用できます。ページ内のすべての URL をそれらの URL の実際の HTML リンクにする場合は、正規表現を使用することもできます。
すべてのプログラミング言語、テキストエディタ、オペレーティングシステムなどが正規表現をサポートしています。プログラマーやネットワーク管理者は、技術ツールの重要な部分として正規表現に長い間注目してきました。
正規表現は、これまで説明したすべての作業などを行うために使用される特別な言語である正規表現を使用して構築されます。正規表現には、学習する必要がある特別な機能があります。
正規表現はとても便利ですが、正規表現と MySQL にはどのような関係があるのでしょうか?前述したように、正規表現の機能は、パターン (正規表現) とテキスト文字列を比較して、テキストを照合することです。 MySQL は、where 句を使用した正規表現の予備的なサポートを提供しており、正規表現を指定して、select によって取得されたデータをフィルタリングできるようになります。
MySQL 正規表現を使用した基本的な文字マッチング
非常に単純な例から始めます。次のステートメントは、列 prod_name にテキスト 1000 が含まれるすべての行を取得します:
select prod_name from products where prod_name regexp '1000' order by prod_name;
このステートメントは、キーワード like が regexp に置き換えられることを除いて、非常によく似ています。 like ステートメントを使用します。これは、regexp に続くものを正規表現 (テキスト本文 1000 に一致する正規表現) として扱うことを MySQL に指示します。
なぜ正規表現をわざわざ使用するのでしょうか?先ほどの例では、正規表現は実際にはあまりメリットをもたらしませんが、次の例を考慮してください:
select prod_name from products where prod_name regexp '.000'order by prod_name;
ここでは正規表現が使用されています式.000。 . は正規表現言語の特殊文字です。これは、任意の文字と一致することを意味するため、1000 と 2000 の両方が一致して返されます
もちろん、この特殊な例は、like 文字とワイルドカード文字を使用して完了することもできます。
like と正規表現の間には重要な違いがあります。次の 2 つのステートメントを見てください:
select prod_name from products where prod_name like '1000' order by prod_name;
select prod_name from products where prod_name regexp '1000' order by prod_name;
上記 2 つのステートメントを実行すると、最初のステートメントはデータを返しませんが、2 番目のステートメントは行を返します。なぜですか?
like は列全体に一致します。一致したテキストが列値にある場合、 like はそのテキストを見つけられず、対応する行は返されません (ワイルドカードが使用されない限り)。正規表現は列値内で一致します。一致するテキストが列値にある場合、正規表現はそれを見つけて、対応する行を返します。これは非常に重要な違いです。
では、正規表現を使用して列の値全体を照合し、like と同じ役割を果たすことができますか?答えは決まっています。^ ロケーターと $ ロケーターを使用するだけです。
以上がmysql での正規表現を使用した検索に関するチュートリアル (1)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。