正規表現に関する個人的な知識 - 遅延マッチング
正規表現の個人的な理解 - 遅延マッチング
問題の説明
この記事へのリンク: 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*?' は優先度数量子を無視するため、最初にどの文字とも一致する必要がないと判断します。_/' の 2 番目の '_' ('w*?' の後の '_') とターゲット文字列 ' _abc_123_ の 'a' は一致しますが、一致は失敗します。その場合のみ、一致しない分岐を試すために 'w*?' が使用されます (a と一致するには w を使用します)。そして a を照合する試みは成功します) )
次のステップでは、照合を試みるべきでしょうか、それとも無視すべきでしょうか? 「w*?」は優先度数量子を無視するため、前のステップを繰り返しますが b に一致せず、「w*?」は上記のステップを繰り返した後、一致しない分岐 ab を試みます。 3 回 (式「w*?」の後の「_」がターゲット文字列の 2 番目の「_」と一致するまで)、最終的に「abc」が一致します。 プロセス (最初の '_' の一致を開始した後):- 式 /_w*?
- _/' 2 番目「_」はターゲット文字列「_abc_123_」の「a」と一致しますが、一致は失敗します。」 w*? ' はターゲット文字列 '_abc_123_' 内の 'a' との一致を試み、一致は成功します。 expression/_w*?
- _/' の 2 番目の '_' とターゲット文字列 ' '_abc_123_' の b' は一致しますが、一致は失敗します。'w*?' はターゲット文字列 '_ab「c_123_」の「ab」は正常に一致しました。 expression/_w*?
- _/' の 2 番目の '_' とターゲット文字列 ' '_abc_123_' の c' は一致しますが、一致は失敗します。'w*?' はターゲット文字列 '_abc_123_'、一致は成功しました。 expression/_w*? _
- /' の 2 番目の '_' とターゲット文字列 ' 「_abc_123_」の「_」が一致すると、一致が成功し、一致が終了します。結果はABCです。 上記は、「Mastering Regular Expressions」の優先度数量指定子の無視に関するセクションを読んだ後の私の考えです。もし間違っている点があれば、喜んでアドバイスを受け入れます。ありがとうございます。
この記事へのリンク: http://www.hcoding.com/?p=130
元の記事、転載する場合は明記してください: JC&hcoding.com

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。
