目次
目次
この記事の目的
このチュートリアルの使い方
正規表現とは正確には何ですか?
入門
正規表現をテストする
メタ文字
*
文字クラス
分岐条件
グループ化

正規表現入門チュートリアル

Aug 09, 2017 pm 01:44 PM
入門チュートリアル 通常 表現

正規表現に関する 30 分間の入門チュートリアル

    1. この記事の目標

    2. このチュートリアルの使用方法

    3. 正規表現とは正確には何ですか?

    4. 入門

    5. 正規表現のテスト

    6. メタキャラクター

    7. 文字エスケープ

    8. 重複

    9. 文字クラス

    10. 分岐条件

    11. 対義語

    12. グループ

    13. 後方参照

    14. ゼロ幅アサーション

    15. 負のゼロ幅アサーション

    16. 注釈

    17. 貪欲と怠惰

    18. 処理オプション

    19. バランスのとれたグループ/再帰一致します

    20. 他に言及されていないことがあります

    21. 著者に連絡してください

    22. 最後に、いくつかの宣伝...

    23. この記事のオンラインリソースと参考文献

    24. 更新記録

    バージョン: v2.31 (2009-4-11) 作成者: deerchao 転載の際は出典を明記してください

    目次

    目次をスキップ

    この記事の目的

    正規表現について理解しましょう30 分で完了し、独自のプログラムや Web ページで使用できるように、基本的な内容を理解します。

    このチュートリアルの使い方

    最も重要なことは、30分ください。正規表現の経験がない場合は、30で始めようとしないでください - 超人的な人でない限り:)

    以下の複雑な表現に怖がらないでください。ステップバイステップで従うだけで、正規表現はあなたが思っているほど難しくないことがわかるでしょう。もちろん、このチュートリアルを読んだ後、多くのことは理解できても、ほとんど何も思い出せなかったとしても、それは正常です。これまで正規表現に触れたことのない人でも、このチュートリアルを読んだ後はかなりのことを理解できるようになると思います。チュートリアルでは、記載された文法を 80% 以上覚えられる可能性はゼロです。これは基本原則を理解していただくためのものであり、正規表現を上手にマスターするには、今後さらに練習して使用する必要があります。

    この記事は、入門チュートリアルであるだけでなく、日常業務で使用できる正規表現構文のリファレンス マニュアルとしても機能します。著者自身の経験に関する限り、この目標はうまく達成されました。ご存知のとおり、すべてを自分で書き留めることはできませんね。

    明確な書式設定 テキスト形式の規則: 技術用語メタキャラクター/文法形式正規表現正規表現の一部(分析用)ペアソース文字列それ一致します 正規表現または正規表現の一部の説明

    補足を非表示にする この記事の右側には、主に関連情報を提供するため、またはプログラマの経験がない人向けにいくつかのコメントがあります概念は読者に説明されており、通常は無視してかまいません。

    正規表現とは正確には何ですか?

    文字は、コンピューターソフトウェアが文字、数字、句読点、スペース、改行、漢字などのテキストを処理する際の最も基本的な単位です。 文字列 は、0 個以上の文字のシーケンスです。 Textはテキスト、文字列です。特定の文字列 が特定の正規表現 に一致するということは、通常、文字列の一部 (またはいくつかの部分) がその式で指定された条件を満たすことができることを意味します。

    文字列を処理するプログラムや Web ページを作成する場合、特定の複雑なルールに一致する文字列を検索する必要があることがよくあります。 正規表現 は、これらのルールを記述するために使用されるツールです。言い換えれば、正規表現はテキスト ルールを記録するコードです。

    おそらく Windows/Dos でのファイル検索に ワイルドカード、つまり *? を使用したことがあるでしょう。特定のディレクトリ内のすべての Word ドキュメントを検索したい場合は、*.doc を検索します。ここで、*は任意の文字列として解釈されます。ワイルドカードと同様に、正規表現もテキストの一致に使用されるツールですが、ワイルドカードよりもニーズを正確に記述することができます。もちろん、複雑になりますが、たとえば、 の検索に使用される正規表現を作成できます。 0 で始まり、2 ~ 3 桁、ハイフン「-」、最後に 7 桁または 8 桁の文字列 (010-12345678 または 0376-7654321 など)。

    入門

    正規表現を学ぶ最良の方法は、例を理解した後、自分で例を変更して実験することです。以下にいくつかの簡単な例を示し、詳細に説明します。

    英語の小説で hi を検索すると仮定すると、正規表現 hi を使用できます。

    これは、ほぼ最も単純な正規表現で、次のような文字列と正確に一致します: は 2 つの文字で構成され、最初の文字は h、次の文字は i です。通常、正規表現を処理するツールでは、大文字と小文字を区別しないオプションが提供されます。このオプションがチェックされている場合、hiHIHihIthisのいずれかと一致します。 4つの状況。

    残念ながら、himhistoryhighなど、多くの単語にhiという2つの連続した文字が含まれています。 hiを使用して検索すると、hiも見つかります。こんにちはという単語を正確に 検索したい場合は、 /bhi/b を使用する必要があります。

    /bは正規表現(まあ、メタキャラクター、メタキャラクターと呼ぶ人もいます)で指定された特別なコードで、単語の始まりか終わり、つまり終わりを表します。言葉の境界線。通常、英語の単語はスペース、句読点、または改行で区切られますが、/b はこれらの単語区切り文字のいずれにも一致せず、 1 つの位置 にのみ一致します。 より正確にする必要がある場合、

    /bは、前後の文字が両方とも一致しない位置 (1 つは存在する、もう 1 つは存在しない、または存在しない) /w と一致します。 探しているものが

    hi のすぐ後に Lucy である場合、/bhi/b.*/bLucy/b を使用する必要があります。 ここで、

    .

    は別のメタキャラクターであり、改行を除く任意の文字に一致します。 * もメタキャラクターですが、文字や位置ではなく数量を表します。* の前の内容を何度でも再利用して式全体を一致させることができることを指定します 。したがって、 .* を組み合わせると、改行を含まない 任意の数の文字 を意味します。これで /bhi/b.*/bLucy/b の意味は明らかです。 最初は hi という単語、次に任意の数の文字 (ただし改行は不可)、そして最後に Lucy という単語です。 改行文字は「/n」、ASCII エンコード 10 (16 進数 0x0A) の文字です。

    他のメタキャラクターを同時に使用すると、より強力な正規表現を構築できます。たとえば、次の例:

    0/d/d-/d/d/d/d/d/d/d/d は、次のような文字列と一致します: は 0 で始まり、その後に 2 が続きます数字、次にハイフン「-」、最後に 8 桁 (つまり、中国の電話番号。もちろん、この例は市外局番が 3 桁の状況にのみ一致します)。

    ここの /d は、 1 桁 (0、または 1、または 2、または...) に一致する新しいメタキャラクターです。 - はメタキャラクターではなく、それ自体 (ハイフン (またはマイナス記号、ダッシュ、または任意の呼び方)) のみと一致します。

    煩わしい繰り返しを避けるために、この式を次のように書くこともできます: 0/d{2}-/d{8}。 ここで、/dの後の{2}({8})は、前の/dを2回(8回)繰り返して一致させる必要があることを意味します 連続です。

    正規表現をテストする

    その他の利用可能なテストツール:

    • RegexBuddy

    • Javascript正規表現オンラインテストツール

    正規表現の読み書きが難しくないと感じたら、あなたは天才か、地球人ではないかのどちらかです。正規表現の構文は、定期的に使用している人であっても混乱を招く可能性があります。正規表現は読み書きが難しく、エラーが発生しやすいため、正規表現をテストするツールを見つける必要があります。

    正規表現の詳細は、環境によって異なります。このチュートリアルでは、Microsoft .Net Framework 2.0 での正規表現の動作を紹介します。そのため、.Net での Regex Tester と呼ばれるツールを紹介します。まず .Net Framework 2.0 がインストールされていることを確認してから、Regex Tester をダウンロードします。これはグリーン ソフトウェアです。ダウンロード後、圧縮パッケージを開いて RegexTester.exe を直接実行します。

    以下は、実行中の Regex Tester のスクリーンショットです:

    Regex Tester运行时的截图

    メタ文字

    これで、/b.* などのいくつかの便利なメタ文字はすでにわかりました。 、正規表現には、/sスペース、タブ、改行記号、中国語の全角スペースなどの空白文字と一致するなど、さらに多くのメタ文字があります。 。 /wは、の文字、数字、アンダースコア、漢字などと一致します。 中国語/漢字の特殊な処理は、.Net が提供する正規表現エンジンによってサポートされています。他の環境での特定の状況については、関連ドキュメントを確認してください。 さらにいくつか例を示します: /ba/w*/b

    は、文字

    a

    で始まるの単語と一致します - まず単語の先頭 (/b )、次に文字 a、次に任意の数の文字または数字 (/w*)、最後に単語の末尾 (/b)さて、正規表現内の単語の意味について話しましょう: 少なくとも 1 つの連続した /w。はい、これは、英語を学ぶときに覚えなければならない同じ名前の何千ものこととはほとんど関係がありません:)

    /d+一致1つ以上の連続する数字

    。ここで、+*に似たメタキャラクターですが、違いは、*は何度でも(おそらく0回)繰り返されるに一致するのに対し、+は一致することです。 1回以上繰り返します/b/w{6}/bは、ちょうど 6 文字の単語と一致します。

    正規表現エンジンは通常、JavaScript の RegExp.test() メソッドや .NET の Regex.IsMatch() メソッドなど、「指定された文字列が正規表現と一致するかどうかをテストする」メソッドを提供します。ここでの一致とは、文字列の中に表現規則に適合する部分があるかどうかを指します。 ^$/d{5,12} に使用しない場合、このメソッドを使用すると、文字列 に 5 ~ 12 個の連続する数字が含まれることのみが保証されます。 、文字列全体が 5 ~ 12 桁であるわけではありません。 メタキャラクター

    ^ (数字の 6 と同じキー上の記号) と $ はどちらも位置に一致し、/b に似ています。 ^ は検索する文字列の先頭に一致し、$ は末尾に一致します。これら 2 つのコードは、入力内容を確認するときに非常に役立ちます。たとえば、Web サイトで QQ 番号を 5 ~ 12 桁で入力する必要がある場合は、^/d{5,12}$ を使用できます。 。 ここでの

    {5,12} は、前に紹介した {2} と似ていますが、{2} のマッチング は 2 回しか繰り返せず、それ以上は繰り返せない点が異なります。 less , {5,12} は、 の繰り返し回数が 5 回未満で 12 回を超えてはいけないことを意味します。それ以外の場合は一致しません。 ^

    $が使用されているため、/d{5,12}と一致するには入力文字列全体を使用する必要があります。これは、入力全体が5である必要があることを意味します最大 12 個の番号なので、入力された QQ 番号がこの正規表現と一致する場合、要件を満たします。 大文字と小文字を無視するオプションと同様に、一部の正規表現処理ツールには複数行を処理するオプションもあります。このオプションがチェックされている場合、^

    $の意味は、行頭と行末を一致させるになります。 文字エスケープ メタ文字自体を検索したい場合、たとえば

    .

    * を検索する場合、問題があります。メタ文字は次のように解釈されるため、指定できません。何か他の意味。このとき、/を使用して、これらの文字の特別な意味をキャンセルする必要があります。したがって、/./*を使用する必要があります。もちろん、/自体を検索するには、//.も使用する必要があります。例: unibetter/.com

    は、unibetter.comCと一致します。 ://Windows C:/Windows と一致します。 繰り返しあなたはすでに前の

    *

    +{2}{5,12}をすでに見ています。以下は正規表現内のすべての修飾子です (*、{5,12} などの指定された数のコード):

    表 1. よく使用されるメタキャラクター
    コード 説明
    . は改行を除く任意の文字と一致します
    /w 文字、数字、アンダースコア、または漢字に一致
    /s 任意の空白文字に一致
    /d 数字を一致させる
    /b 単語の先頭または末尾と一致します
    ^ 文字列の先頭と一致します
    $ 文字列の末尾と一致します
    表 2. よく使用される修飾子
    コード/構文 説明
    * 0回以上繰り返す
    + 1回以上繰り返します
    ? 0回または1回繰り返します
    {n} n回繰り返します
    {n,} n回以上繰り返す
    {n,m} n回からm回食べる

    ここで、繰り返しの使用例をいくつか示します:

    Windows /d+は、Windowsの後に1つ以上の数字が続きます

    ^/w+は、行の最初の単語と一致します(または文字列全体の最初の単語、一致の具体的な意味はオプション設定によって異なります)

    文字クラス

    対応する文字メタキャラクターがすでに存在するため、数字、文字または数字、空白を見つけるのは非常に簡単ですセットですが、事前定義されたメタキャラクターを持たない文字セット (母音 a、e、i、o、u など) を照合したい場合はどうすればよいでしょうか?

    とても簡単です。[aeiou]英語の母音に一致します, [.?!]match 句読点 (.それとも!)

    文字範囲を簡単に指定することもできます。[0-9]/dと全く同じ意味です: 1桁; 同じLi [ a-z0-9A-Z_]/w と完全に同等です (英語のみを考慮した場合)。

    より複雑な式は次のとおりです: /(?0/d{2}[) -]?/d{8}

    「(」と「)」もメタキャラクターですが、後でグループ化セクションで説明するため、ここでエスケープする必要があります。

    この式は、(010)88886666022-2233445502912345678 など、いくつかの形式の 電話番号 と一致します。 待ってください。これについて分析してみましょう。最初にエスケープ文字 /( があり、これは 0 回または 1 回出現します (?)。次に 0 があり、その後に 2 つの数字 ( /d{2})、次に ) または - または space のいずれかが 1 回出現するかどうか (?) 、そして最後に8 つの数字 (/d{8})。

    分岐条件

    残念ながら、今の式は 010)12345678(022-87654321) などの「間違った」形式にも一致する可能性があります。この問題を解決するには、 を使用する必要があります。 分岐条件 。正規表現内の 分岐条件 は、ルールのいずれかが満たされた場合、一致したものとみなされます。異なるルールがわかりませんか? 大丈夫です。例を見てください: 0/d{2}-/d{8}|0/d{3}-/d{7}

    ハイフンで区切られた 2 種類の電話番号を 照合できます。1 つは 3 桁の市外局番と 8 桁の市内番号 (010-12345678 など)、もう 1 つは 4 桁の市外局番と 7 桁の市外局番です。市内番号 (0376-2233445) /(0/d{2}/)[- ]?/d{8}|0/d{2}[- ]?/d{8} この式 は、3 桁の市外局番を持つ電話番号に一致します。市外局番は括弧で囲むことも、括弧で囲まなくても、市外局番と市内局番はハイフンまたはスペースで区切ることもできます。分岐条件を使用してこれを表現することができます。この式は 4 桁の市外局番

    もサポートするように拡張されました。

    /d{5}-/d{4}|/d{5}この式は、米国の郵便番号と一致するために使用されます。米国の郵便番号の規則は 5 桁、またはハイフンで区切られた 9 桁です。この例が挙げられている理由は、次の問題を説明できるためです。 分岐条件を使用するときは、各条件の順序に注意してください。これを /d{5}|/d{5}-/d{4} に変更すると、5 桁の郵便番号 (および 9 桁の郵便番号の最初の 5 桁) のみが表示されます。一致する。その理由は、分岐条件を照合するときに、各条件が左から右にテストされ、特定の分岐が満たされると、他の条件は考慮されないためです。

    グループ化

    1 つの文字を繰り返す方法 (文字の直後に修飾子を追加するだけ) についてはすでに説明しましたが、複数の文字を繰り返したい場合はどうすればよいでしょうか。括弧を使用して 部分式 (グループ化とも呼ばれる) を指定し、この部分式の繰り返し数を指定したり、部分式に対して他の操作を実行したりすることもできます (後で紹介します)。 。

    (/d{1,3}/.){3}/d{1,3} は、単純な IP アドレス一致式です。この式を理解するには、次の順序で分析してください: /d{1,3} は、 1 ~ 3 桁の数値 , (/d{1,3}/.){ と一致します。 3} 3 桁の数字と英語のピリオド (この全体も グループ ) の一致を 3 回繰り返し 、最後に 1 ~ 3 桁の を追加します ( /d{1 ,3})。 IP アドレスの数字は 255 を超えることはできません。「24」の第 3 シーズンの脚本家に騙されないでください...

    残念ながら、これは

    256.300.888.999 にも一致します。 この IP アドレスは存在できません。算術比較を使用できる場合は、この問題を簡単に解決できる可能性がありますが、正規表現では数学関数が提供されないため、正しい IP アドレスを記述するには、長いグループ化、選択、および文字クラスのみを使用できます: ( (2[0-4]/d|25[0-5]|[01]?/d/d?)/.){3}(2[0-4]/d|25[0-5 ]| [01]?/d/d?)この式を理解する鍵は、

    2[0-4]/d|25[0-5]|[01]?/d/d?を理解することです。ここでは詳しく説明しません。それはあなた次第です。あなたはその意味を分析できるはずです。

    以上が正規表現入門チュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    Video Face Swap

    Video Face Swap

    完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

    中国語版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    PHP 実装フレームワーク: CakePHP 入門チュートリアル PHP 実装フレームワーク: CakePHP 入門チュートリアル Jun 18, 2023 am 09:04 AM

    インターネット技術の継続的な発展に伴い、Web 開発技術も常に更新され、反復されています。 PHP はオープンソース プログラミング言語として、Web 開発で広く使用されています。 PHP 開発で一般的に使用されるツールの 1 つである PHP フレームワークは、開発効率とコード品質を向上させることができます。この記事では、PHP フレームワークである CakePHP を紹介し、始めるための簡単なチュートリアルをいくつか提供します。 1.CakePHPとは何ですか? CakePHP は MVC (Model-View-Control) に基づいたモデルです。

    初心者ガイド: ゼロから始めて、MyBatis を段階的に学習します 初心者ガイド: ゼロから始めて、MyBatis を段階的に学習します Feb 19, 2024 am 11:05 AM

    簡潔でわかりやすい MyBatis 入門チュートリアル: 最初のプログラムをステップバイステップで作成する MyBatis は、データベースとの対話プロセスを簡素化する人気のある Java 永続層フレームワークです。このチュートリアルでは、MyBatis を使用して簡単なデータベース操作を作成および実行する方法を説明します。ステップ 1: 環境セットアップ まず、Java 開発環境がインストールされていることを確認します。次に、MyBatis の最新バージョンをダウンロードし、Java プロジェクトに追加します。 MyBatisの公式Webサイトからダウンロードできます。

    Golang 正規表現を使用して複数の単語または文字列を照合するにはどうすればよいですか? Golang 正規表現を使用して複数の単語または文字列を照合するにはどうすればよいですか? May 31, 2024 am 10:32 AM

    Golang の正規表現では、パイプ文字 | を使用して複数の単語または文字列を一致させ、各オプションを論理 OR 式として区切ります。例: 「fox」または「dog」に一致します: fox|dog は「quick」、「brown」または「lazy」に一致します: (quick|brown|lazy) 「Go」、「Python」または「Java」に一致します: Go| Python |Java は単語または 4 桁の郵便番号と一致します: ([a-zA

    PHP正規表現で何かで始まる文字列を置換する方法 PHP正規表現で何かで始まる文字列を置換する方法 Mar 24, 2023 pm 02:57 PM

    PHP 正規表現は、テキストの処理と変換のための強力なツールです。テキスト コンテンツを解析し、特定のパターンに従って置換またはインターセプトすることで、テキスト情報を効果的に管理できます。その中でも、正規表現の一般的な応用例は、特定の文字で始まる文字列を置換することです。

    PHP 実装フレームワーク: Lumen フレームワーク入門チュートリアル PHP 実装フレームワーク: Lumen フレームワーク入門チュートリアル Jun 18, 2023 am 08:39 AM

    Lumen は、Laravel フレームワーク開発者によって開発された PHP ベースのマイクロフレームワークであり、元々は、Laravel フレームワークのコンポーネントと機能の一部を保持しながら、小さな API アプリケーションとマイクロサービスを迅速に構築するように設計されました。 Lumen フレームワークは軽量で高速で使いやすいため、広く注目され、使用されています。この記事では、Lumen フレームワークを簡単に使い始め、Lumen フレームワークを使用して単純な API アプリケーションを構築する方法を学びます。フレームワークの準備 Lumen フレームワークを学習する前に、次のことを行う必要があります。

    正規表現を使用してPHPで漢字を削除する方法 正規表現を使用してPHPで漢字を削除する方法 Mar 03, 2023 am 10:12 AM

    正規表現を使用して PHP で中国語を削除する方法: 1. PHP サンプル ファイルを作成する; 2. 中国語と英語を含む文字列を定義する; 3. "preg_replace('/([\x80-\xff]*)/i', '',$a);" 通常の方法では、クエリ結果から中国語の文字を削除できます。

    通常のマッチングを使用してphpでhtmlタグを削除する方法 通常のマッチングを使用してphpでhtmlタグを削除する方法 Mar 21, 2023 pm 05:17 PM

    この記事では、PHP 正規表現を使用して HTML タグを削除し、HTML 文字列からプレーン テキスト コンテンツを抽出する方法を学びます。 HTML タグを削除する方法を示すために、まず HTML タグを含む文字列を定義しましょう。

    PHP 正規表現を使用して URL が HTTPS プロトコルであるかどうかを確認する方法 PHP 正規表現を使用して URL が HTTPS プロトコルであるかどうかを確認する方法 Jun 24, 2023 am 08:16 AM

    Web サイトのセキュリティはますます注目を集めており、HTTPS プロトコルを使用してデータ送信のセキュリティを確保することが、現在の Web サイト開発の重要な部分となっています。 PHP 開発において、正規表現を使用して URL が HTTPS プロトコルであるかどうかを確認するにはどうすればよいですか?ここで私たちはそれを知りに来ました。正規表現 正規表現は、ルールを記述するために使用される表現です。テキストを処理するための強力なツールであり、テキストの一致、検索、置換に広く使用されています。 PHP 開発では、正規表現を使用して URL 内の http と一致させることができます。

    See all articles