目次
正規表現の個人的な理解 - 遅延マッチング、正規表現マッチング
問題の説明
/_w*?_/
ホームページ バックエンド開発 PHPチュートリアル 正規表現の個人的な理解 - 遅延マッチング、正規表現マッチング_PHP チュートリアル

正規表現の個人的な理解 - 遅延マッチング、正規表現マッチング_PHP チュートリアル

Jul 13, 2016 am 10:12 AM
正規表現

正規表現の個人的な理解 - 遅延マッチング、正規表現マッチング

問題の説明

この記事へのリンク: http://www.hcoding.com/?p=130

初めて正規表現を学習するとき、私はいつも疑問を抱きます。たとえば、文字列「_abc_123_」の最初のペア「_」の間の文字を照合する必要がある場合、私は次のように考えます。これを「/_w*_ /」と書きます。一致結果は「abc」ではなく「abc_123」となり、マスターは疑問符「/_w*?_/」を追加すると言いました。の場合、一致結果は「abc」」になります。

知っていますか? ' を単独で使用する場合は、0 回または 1 回繰り返すことを意味します。一方、'? ' は繰り返し修飾子の後に表示され、その機能は遅延マッチング、つまり可能な限り少ない文字のマッチングです。遅延修飾子の説明:

    *?: 何度でも繰り返しますが、
  • できるだけ少ない回数にしてください
  • +?: 1 回以上繰り返します
  • ただし、できるだけ少なく繰り返します
  • ??: 0 回または 1 回繰り返します
  • ただし、できるだけ少なく繰り返します
  • {n,m}?: n から m 回繰り返しますが、できるだけ少なく繰り返します
  • {n,}?: n 回以上繰り返しますが、できるだけ少なく繰り返します
  • はい、「できる限り減らす」、これは遅延マッチングの大雑把で簡単な説明です。
それでは、「繰り返しをできるだけ少なくする」ということをどのように理解すればよいでしょうか?これは、正規表現の無視される優先度数量子から説明できます。

優先度数量子を無視する

数量子「*?」、「+?」、「??」、「{n,m}?」、「{n,}?」はすべて無視される優先度数量子です。無視される優先度数量子は、?、+ で使用されます。 , * と {} の後に ? を追加することで構成されます。無視する優先度は、マッチング時に最初に無視を試行し、失敗した場合はバックトラックしてから試行することを選択します。たとえば、「ab??」が「abb」と一致する場合、「ab」ではなく「a」が取得されます。エンジンが a と正常に一致すると、優先順位を無視するため、エンジンは最初に b と一致しないことを選択し、式が終了したことが判明した場合は、一致が成功したことを直接報告します。具体的には、次の例を使用して、優先度数量詞を無視する動作原理を段階的に説明します。

上記の例と同様に、「

/_w*?_/

」を使用して、「

_abc_123_」の最初の「_」のペア間の文字を一致させます。 最初の '_' の一致を開始した後、'w*?' は優先度数量子を無視するため、最初にどの文字とも一致する必要がないと判断します。このとき、式 '/_w*?

_

/' 2 番目の '_' ('w*?' の後の '_') は、ターゲット文字列 '_abc_123_' の 'a' と一致します。一致が失敗した場合は、 'w*?' が使用され、一致しないブランチが試行されます (w を使用して a を一致させます) 次のステップでは、一致させるべきでしょうか、それとも無視すべきでしょうか? 「w*?」は優先度数量子を無視するため、前のステップを繰り返しますが b に一致せず、「w*?」は上記のステップを繰り返した後、一致しない分岐 ab を試みます。 3 回 (式「w*?」の後の「_」がターゲット文字列の 2 番目の「_」と一致するまで)、最終的に「abc」が一致します。

プロセス (最初の「_」の一致を開始した後):

式 /_w*?

    _
  • /' の 2 番目の '_' は、ターゲット文字列 '_abc_123_' の 'a' と一致しますが、一致は 'w で失敗します。 *?'ターゲット文字列 '_abc_123_' 内の 'a' との一致を試みると、一致は成功します。 式 /_w*?
  • _
  • /' の 2 番目の '_' は、ターゲット文字列 '_abc_123_' の 'b' と一致し、一致は 'w で失敗します。 *?'ターゲット文字列 '_abc_123_' 内の 'ab' との一致を試みます。一致は成功します。 式 /_w*?
  • _
  • / の 2 番目の '_' は、ターゲット文字列 '_abc_123_' の 'c' と一致しますが、一致は 'w で失敗します。 *?'ターゲット文字列 '_abc_123_' 内の 'abc' との一致を試みると、一致は成功します。 式 /_w*?_
  • /' の 2 番目の '_' は、ターゲット文字列 '_abc_123_' の '_' と一致し、一致が成功し、一致が終了します。 。結果はABCです。 上記は、「Mastering Regular Expressions」の優先度数量指定子の無視に関するセクションを読んだ後の私の考えです。間違っている点があれば、喜んでアドバイスを受け入れます。ありがとうございます。
この記事へのリンク: http://www.hcoding.com/?p=130

元の記事は、JC&hcoding.com と明記してください

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/921718.html技術記事正規表現の個人的な理解 - 遅延マッチング、正規表現マッチングの問題の説明 この記事へのリンク: http://www.hcoding.com/?p=130 初めて正規表現を学ぶとき、たとえば...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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 正規表現の検証: 数値形式の検出 PHP 正規表現の検証: 数値形式の検出 Mar 21, 2024 am 09:45 AM

PHP 正規表現の検証: 数値形式の検出 PHP プログラムを作成する場合、ユーザーが入力したデータを検証する必要がよくあります。一般的な検証の 1 つは、データが指定された数値形式に準拠しているかどうかを確認することです。 PHP では、正規表現を使用してこの種の検証を行うことができます。この記事では、PHP 正規表現を使用して数値形式を検証する方法を紹介し、具体的なコード例を示します。まず、一般的な数値形式の検証要件を見てみましょう。 整数: 0 ~ 9 の数字のみが含まれ、プラスまたはマイナス記号で始めることができ、小数点は含まれません。浮動小数点

正規表現を使用して Golang でメールアドレスを検証するにはどうすればよいですか? 正規表現を使用して Golang でメールアドレスを検証するにはどうすればよいですか? May 31, 2024 pm 01:04 PM

正規表現を使用して Golang で電子メール アドレスを検証するには、次の手順に従います。 regexp.MustCompile を使用して、有効な電子メール アドレス形式と一致する正規表現パターンを作成します。 MatchString 関数を使用して、文字列がパターンと一致するかどうかを確認します。このパターンは、次のようなほとんどの有効な電子メール アドレス形式をカバーします。 ローカル ユーザー名には文字、数字、および特殊文字を含めることができます: !.#$%&'*+/=?^_{|}~-` ドメイン名には少なくとも次の文字が含まれている必要があります。 1 文字の後に文字、数字、またはハイフンを続けます。トップレベル ドメイン (TLD) は 63 文字を超えることはできません。

Go で正規表現を使用してタイムスタンプを照合するにはどうすればよいですか? Go で正規表現を使用してタイムスタンプを照合するにはどうすればよいですか? Jun 02, 2024 am 09:00 AM

Go では、正規表現を使用してタイムスタンプを照合できます。ISO8601 タイムスタンプの照合に使用されるような正規表現文字列をコンパイルします。 ^\d{4}-\d{2}-\d{2}T \d{ 2}:\d{2}:\d{2}(\.\d+)?(Z|[+-][0-9]{2}:[0-9]{2})$ 。 regexp.MatchString 関数を使用して、文字列が正規表現と一致するかどうかを確認します。

Go言語の正規表現と文字列処理をマスターする Go言語の正規表現と文字列処理をマスターする Nov 30, 2023 am 09:54 AM

最新のプログラミング言語として、Go 言語は強力な正規表現と文字列処理関数を提供し、開発者が文字列データをより効率的に処理できるようにします。開発者にとって、Go 言語での正規表現と文字列処理を習得することは非常に重要です。この記事では、Go 言語の正規表現の基本概念と使い方、Go 言語を使用して文字列を処理する方法を詳しく紹介します。 1. 正規表現 正規表現は文字列のパターンを記述するためのツールであり、文字列の照合、検索、置換などの操作を簡単に実装できます。

PHP 正規表現: 厳密な一致とあいまいな包含の除外 PHP 正規表現: 厳密な一致とあいまいな包含の除外 Feb 28, 2024 pm 01:03 PM

PHP 正規表現: 完全一致と除外 ファジー包含正規表現は、プログラマがテキストを処理する際に効率的な検索、置換、フィルタリングを実行できる強力なテキスト マッチング ツールです。 PHP では、正規表現は文字列処理やデータ マッチングにも広く使用されています。この記事では、PHP で完全一致を実行し、あいまい包含操作を除外する方法に焦点を当て、具体的なコード例を使用して説明します。完全一致 完全一致とは、バリエーションや余分な単語ではなく、正確な条件を満たす文字列のみと一致することを意味します。

Goで正規表現を使用してパスワードを確認するにはどうすればよいですか? Goで正規表現を使用してパスワードを確認するにはどうすればよいですか? Jun 02, 2024 pm 07:31 PM

Go で正規表現を使用してパスワードを検証する方法は次のとおりです。 パスワードの最小要件 (小文字、大文字、数字、特殊文字を含む少なくとも 8 文字) を満たす正規表現パターンを定義します。 regexp パッケージの MustCompile 関数を使用して正規表現パターンをコンパイルします。 MatchString メソッドを使用して、入力文字列が正規表現パターンと一致するかどうかをテストします。

正規表現のワイルドカードとは何ですか? 正規表現のワイルドカードとは何ですか? Nov 17, 2023 pm 01:40 PM

正規表現のワイルドカードには、「.」、「*」、「+」、「?」、「^」、「$」、「[]」、「[^]」、「[a-z]」、「[A-Z]」が含まれます。 、"[0-9]"、"\d"、"\D"、"\w"、"\W"、"\s&quo

漢字フィルタリング: PHP 正規表現の練習 漢字フィルタリング: PHP 正規表現の練習 Mar 24, 2024 pm 04:48 PM

PHP は広く使用されているプログラミング言語であり、特に Web 開発の分野で人気があります。 Web開発の過程では、ユーザーが入力したテキストをフィルタリングして検証する必要がよくありますが、その中でも文字フィルタリングは非常に重要な操作です。この記事では、PHP で正規表現を使用して漢字フィルタリングを実装する方法と、具体的なコード例を紹介します。まず最初に、Unicode の漢字の範囲は u4e00 から u9fa5 までである、つまりすべての漢字がこの範囲内にあることを明確にする必要があります。

See all articles