正規表現を使い始める:正規表現で簡単に

開示: あなたのサポートはサイトの運営を維持するのに役立ちます!このページで推奨する一部のサービスについては、紹介料を稼ぎます.


正規表現、つまりregexまたはregexpは、論理パターンを定義する文字と記号のシーケンスです。次に、正規表現で定義された論理パターンに一致する文字列を識別するために、テキストの文字列をパターンと比較できます。この比較に基づいて、正規表現を使用して、特定の要件を満たすテキストの文字列を識別したり、文字列が必要なパターンを満たすことを検証したりできます。.

この正規表現の説明が少し抽象的であると思われる場合は、正規表現の一般的な使用方法をいくつか見てみると、それらの有用性を明確にするのに役立ちます。正規表現は、コンピュータプログラミングで常に使用されます。たとえば、正規表現の一般的な使用法は次のとおりです。

  • Webフォームに入力された電子メールアドレスが適切に作成された電子メールアドレスであることを検証するには.
  • 特定のファイル拡張子で終わるコンピューターシステム内のすべてのファイルを識別するには.
  • Webサーバーに要求されたURLを確認し、URLが正規表現パターンに一致する場合にリダイレクトを実行するには.

正規表現はパターンを記述するための論理的なシステムであり、言語ではないことを理解することが重要です。ただし、正規表現はさまざまなプログラミング言語で実装されており、多くのテキストエディターでテキストを検索するためにも使用できます。.

正規表現の歴史

正規表現は、1956年に数学者のスティーブンコールクリーネによって作成されたときに、理論的なコンピューターサイエンスの原則として考えられました。当初、正規表現は純粋に理論的なものでした。ただし、1968年にケントンプソンがQEDテキストエディタに組み込んだときに、初めてコンピュータアプリケーションで使用されました。トンプソンが正規表現を採用したのは、一人ではありませんでした。同じ頃、Douglas T Rossが語彙分析の​​ための正規表現をコンパイラーに組み込みました。.

これらの最初の正規表現の実装はすぐに続きました。 1970年代初頭、正規表現の論理パターンがUnixテキストエディタに追加されました。その後まもなく、edに組み込まれた正規表現パーサーは、grepと呼ばれるスタンドアロンのUnixユーティリティとしてロールオフされました。その時点では、vi、lex、sed、Awk、expr、Emacsなどの多くのUnixユーティリティとアプリケーションに正規表現サポートが組み込まれるのは時間の問題でした.

正規表現がUnixオペレーティングシステムのさまざまなコーナーに到達するまでに、それは根付いていました。しかし、まだ改善の余地がありました。したがって、Kleeneによって開発された元の正規表現構文は、Henry Spencerによって作成された拡張正規表現ライブラリに基づいて、拡張正規表現パターンのサポートがPerlに追加された1980年代に改善されました。しかし、正規表現がPerlに追加された後も、Spencerはアイデアを拡張し続け、彼のライブラリのより高度なイテレーションがTclプログラミング言語に組み込まれ、その実装は最終的に注目を集める最新の情報管理プロジェクトに組み込まれました。 PostgreSQLのように.

1980年代を通じて、正規表現は標準化されませんでした。ただし、正規表現がPOSIX.2で標準化された1992年に変更されました。今日、正規表現は多くの異なるプログラミング言語とテキストエディターでサポートされています。最近のほとんどの実装はPOSIXに準拠していますが、一般に、実装ごとに異なるさまざまな方法でPOSIX標準を拡張しています。その結果、基本的な正規表現パターンは通常、実装ごとに一致しますが、高度なパターンは、適用される環境によってかなり異なる場合があります。.

正規表現のしくみ

正規表現は、リテラルと特殊文字の2種類の文字の組み合わせです。これらの文字を組み合わせて、論理パターンを定義します。テキストの文字列をこのパターンと比較して、式で定義されたパターンに一致するかどうかを確認できます.

リテラル文字は自分自身を表します。つまり、リテラル文字aは文字aを表し、リテラル番号1は数字1を表します。ただし、正規表現はリテラル文字に限定されている場合、あまり価値がありません。特殊文字は正規表現を便利にするものです.

特殊文字は、正規表現パターン内で論理的な意味を持ちます。たとえば、ドットを見てみましょう。ドットまたはピリオドは、任意の文字を表すために使用されます。したがって、.aは、2番目の文字が文字aである2文字のシーケンスと一致します。つまり、ba、1a、-a、aa、および空のスペースが前に付いた文字aはすべて、その正規表現パターンに一致します。.

ドットは正規表現の唯一の特殊文字ではありません。複雑な論理パターンを記述するためにリテラルと組み合わせることができる約12の特殊文字があります。複雑な式を定義するためにリテラルと特殊文字を組み合わせる方法の2つの例を見てみましょう。

  • テキストの文字列がメールアドレスであることを確認したい場合は、次の正規表現パターンに対してテストできます:^ [A-Z0-9 ._%+-] [email protected] [A-Z0-9.-] +。[AZ] {2、} $.
  • ファイル名をスキャンして、ファイル拡張子が.phpで終わるものをキャッチするには、次の正規表現を使用できます:^。*。php $.

正規表現を初めて使用する場合、これらのパターンはおそらくかなり混乱します。これらのパターンの仕組みを理解するには、すべての特殊文字の意味を理解する必要があります.

正規表現の特殊文字

各正規表現の実装はいくつかの点で多少異なりますが、一般的にこれらはすべて、いくつかの例外を除いてこれらの特殊文字を同じように扱います.

  • :バックスラッシュ文字は、他の特殊文字をエスケープするために使用されます。したがって、ドットなどの別の文字をエスケープして、リテラル文字として解釈されるようにする場合は、次のようにドットの前にバックスラッシュを付けることによって、そうすることができます。 .
  • ^:アップティックは、文字列の開始位置を示すために使用されます。正規表現^ aは、文字aで始まるすべての文字列に一致します.
  • $:ドル記号は、文字列の終了位置に一致させるために使用されます。正規表現a $は、リテラル文字aで終わるすべての文字列に一致します.
  • .:ドットまたはピリオドは、改行(n)文字以外の任意の文字と一致します。正規表現1.3は、任意の文字列をリテラル1、任意の文字、およびリテラル3(123、1a3、さらには1 3など)と照合します。.
  • |:垂直パイプは選択演算子であり、単語orの代用として解釈できます。したがって、正規表現a | bは「aまたはb」として読み取ることができ、文字aまたは文字bのいずれかに一致します。.
  • *:アスタリスクは、先行する文字と0回以上一致するために使用されます。したがって、正規表現。*は、改行文字が含まれていない限り、すべての文字列に一致します。.
  • ?:疑問符は、直前の文字と0回または1回一致しますが、それ以上は一致しません。正規表現123?したがって、12または123に一致します.
  • +:プラス記号は直前の文字と1回以上一致しますが、前の文字と0回以上一致するアスタリスクとは異なり、文字は少なくとも1回出現する必要があります。したがって、正規表現a * b +はabおよびbと一致しますが、aとは一致しません。これは、プラス記号の使用により、bが少なくとも1回出現する必要があるためです。.
  • […]:大括弧は、大括弧内に含まれる単一の文字と一致します。または、この[^ …]のように、括弧内に含まれていない任意の文字に一致するようにuptickを追加できます。大括弧内の特殊文字をエスケープする必要はありません。それらはリテラルとして解釈されます。大括弧は、文字の範囲を定義するためによく使用されます。たとえば、正規表現[0-9]は任意の1桁に一致し、[A-Z]は英語のアルファベットの大文字に一致します。最後に、角かっこにはカンマ区切りの文字を含めることができます。したがって、[a、g]は、文字aとgのいずれかに一致します.
  • {…}:明示的な量指定子と呼ばれる中括弧は、前の文字が出現する必要がある回数を指定します。正規表現ab {2} cはabbcによってのみ満たされます。 2つ目の数値を追加して、許容値の範囲を作成できます。したがって、ab {2,3} cはabbcまたはabbbcのいずれかに一致し、[0-9] {1,2}は1桁または2桁の数字に一致します.
  • (…):括弧は、より大きな式内の部分式をマークするために使用されます。したがって、正規表現(abc)*は、abcの文字で構成されるすべての文字列に一致しますが、3つの文字すべてがこの順序で一緒に表示される必要があります。.

特殊文字自体は、いくらか便利です。強力なパターンを説明できるのは、これらの特殊文字とリテラルの組み合わせです。上記の特殊文字のリストには、いくつかの単純な特殊文字の組み合わせが含まれています。 PHPファイルを識別するための正規表現をもう一度見て、これらの文字がどのように連携するかを見てみましょう.

問題の正規表現は^。*。php $です。一度に一つずつ見ていきましょう.

  • ^は、テスト文字列の始まりを示します。この場合、ファイル名になります。.
  • .*ファイル名に任意の数の文字を含めることができるが、改行は含めないことを示すために連携します。.
  • .phpは、ドットが特殊文字ではなくリテラルとして解釈されるようにするエスケープ文字で始まります。次に、phpというリテラル文字は、ファイル名の後に、ドットと文字phpの組み合わせを確認することを示しています。.
  • $は、一致するために、.php拡張子が検索文字列の最後に表示される必要があることを示します.

ご覧のとおり、この正規表現はわずか9文字で、複雑なファイル名をふるいにかけて.phpファイル拡張子で終わるものを特定できる論理パターンを作成します.

UnicodeとRegex

正規表現を処理するときに発生する可能性のある問題の1つは、現代の英語のアルファベットの一部ではない文字を使用する言語を処理する方法です。 Unicodeは、数字を数値にエンコードしてこの問題を解決しようとするエンコード標準です.

一部の正規表現実装は、Unicodeを使用して正規表現パターンを構築することをサポートしています。つまり、さまざまな異なる言語の文字を含む文字列をテストできる正規表現パターンを作成できます。さらに、Unicode式をリテラルおよび特殊文字と組み合わせて、複雑な正規表現パターンを構築できます.

最も一般的なUnicode正規表現パターンには次のものがあります。

  • p {L}:任意の言語の任意の文字に一致します。したがって、p {L} {2,4}は、2〜4文字の長さの任意の文字シーケンスに一致します.
  • p {Z}:スペース文字に一致します.
  • p {N}:数字に一致します.
  • p {P}:句読文字に一致します.

使用している実装がUnicode正規表現をサポートしている場合、正規表現を作成するときに使用できる多くのUnicodeプロパティがあります。詳細については、Regular-Expressions.infoのUnicode正規表現をご覧ください。.

資源

この入門書では、正規表現がどのように機能するか、それを使用してテキストエディターでコードとテキストの特定のビットを特定する方法、またはコンピューターアプリケーションでデータを識別して検証する方法の基本的な感触を説明するのに十分なだけ取り上げました。詳細については、この簡単なチュートリアルで説明した内容よりも高度な情報を提供している次のリソースをご覧ください。

  • Regular-Expressions.info:記事やチュートリアルの形での正規表現に関する豊富な知識.
  • RegExLib.comのRegexチートシート:さまざまな特殊文字をすべてまっすぐに保つのに役立つ便利なチートシート.
  • RegExLib.com:ニーズに合わせてコピーおよび変更できる正規表現の無料リポジトリ.

正規表現を書くコツをつかむ最善の方法の1つは、正規表現を書き始めることです。次のオンラインツールを使用すると、カスタム正規表現をその場でカスタムテキストのブロックと比較して、機能する正規表現を作成する方法を理解できます。

  • RegExr:キャッチフレーズは、「RegExを学び、構築し、テストする」というすべてを語っています。
  • 正規表現パル:正規表現パターンを作成し、それに対して文字列をテストして、期待どおりに動作することを確認します.
  • 正規表現101:すべての正規表現実装が同じように作成されるわけではありません。このツールを使用して、正規表現パターンに対して文字列をテストし、パターンを実装するプログラミング言語に基づいて動作を微調整します。 PHP、JavaScript、Python、Erlangがサポートされています.

かなり多くのテキストが正規表現について書かれていますが、3つはクラスで最高のものとして際立っています。あなたが本当に正規表現を習得したいのであれば、これらの3つのテキストのどれでもあなたをそこに導くのに長い道のりを行くでしょう:

  • 正規表現クックブック:GoyvaertsとLevithanによる8つのプログラミング言語の詳細なソリューション(2012)
  • Michael Fitzgeraldによる正規表現の紹介(2012)
  • Jeffrey E F Friedlによる正規表現の習得(2006).

概要

正規表現は、コンピュータープログラマーが論理パターンを構築するために使用する言語に依存しないツールです。次に、これらのパターンを使用して、パターンに一致するテキストの文字列を識別できます。正規表現の実装は豊富で、正規表現はほとんどの最新のプログラミング言語でサポートされており、多くのテキストエディターに組み込まれている検索ツール内で利用できます。正規表現を使い始めるのは難しい場合がありますが、正規表現を習得することは、コンピュータープログラマーの開発に必要なステップです。.

参考資料とリソース

コンピュータとコーディングに関連するガイド、チュートリアル、およびインフォグラフィックが他にもあります。

  • Bashプログラミングリソース:最も重要なUnixコマンドラインシェルから始めましょう.
  • Sedの紹介とリソース:ストリームエディターは、正規表現を使用および学習するための優れたツールです。.
  • Awkのリソース:sedの姉妹ツールAwkのすべてを学ぶ.

ウェブマスターツールA〜Zの究極のリスト

Sed、Awk、Bashは、システム管理者がオペレーティングシステムを管理できるようにするツールの大規模なコレクションの一部にすぎません。ウェブマスターツールA〜Zの究極のリストは、あなたの仕事をする上で多くの助けを提供します.

ウェブマスターツールA〜Zの究極のリスト
ウェブマスターツールA〜Zの究極のリスト

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map