$_content =<<< HTML<!-- Layout name="header" --><!-- Layout name="footer" -->HTML;preg_match( '/^<!--\sLayout\sname\s*=\s*"(.*)"\s-->/', $_content, $matches);print_r($matches);
preg_match( '/^<!--\sLayout\sname\s*=\s*"(.*)"\s-->$/', $_content, $matches);
$_content =<<< HTML<!-- Layout name="header" --><!-- Layout name="footer" -->HTML;preg_match( '/^<!--\sLayout\sname\s*=\s*"(.*)"\s-->/', $_content, $matches);print_r($matches);
私は正規表現に夢中なのですが、なぜ $matches[0] が空なのでしょうか?
正規表現を書きます。これは通常は一致しますが、一致した文字列全体を返すためにも必要です
正規表現は次のとおりです
preg_match( '/^<!--\sLayout\sname\s*=\s*"(.*)"\s-->/', $_content, $matches);
$_content の内容は
<!-- Layout name="header" --><!-- Layout name="footer" -->
一致することしかできないことはわかっています最初のものですが、公式ドキュメントによると: $matches[0] には完全なパターンに一致するテキストが含まれます
しかし、私は長い間テストしており、次の結果しか取得できません
Array( [0] => [1] => header)
なぜ $ なのか一致[0]は空ですか?一致したテキストはどうなるでしょうか? (私の当初の意図は、$matches[0] の値が であることです。)
別の問題があります。なぜ一致しないのかわかりません。このように、最後にドル記号を追加すると何も一致しませんが、オンラインのドキュメントを見ていて、その理由が知りたいです。誰かが私に答えてくれることを願っています。ありがとう。
めまい、1,000 ポイント持っているのに、なぜ 100 ポイントしかあげられないのですか? 。 。
ディスカッションに返信(解決策)
preg_match( '/^<!--\sLayout\sname\s*=\s*"(.*)"\s-->$/', $_content, $matches);
ログイン後にコピー $_content =<<< HTML<!-- Layout name="header" --><!-- Layout name="footer" -->HTML;preg_match( '/^<!--\sLayout\sname\s*=\s*"(.*)"\s-->/', $_content, $matches);print_r($matches);
ログイン後にコピーログイン後にコピーは問題ありません
preg_match( '/^<!--\sLayout\sname\s*=\s*"(.*)"\s-->$/', $_content, $matches);
$_content =<<< HTML<!-- Layout name="header" --><!-- Layout name="footer" -->HTML;preg_match( '/^<!--\sLayout\sname\s*=\s*"(.*)"\s-->/', $_content, $matches);print_r($matches);
あなたが自分で混乱しているだけです
$matches[0] はテキストモードでのみ表示されるHTMLタグです
Array( [0] => <!-- Layout name="header" --> [1] => header)
$matches[0] には完全なパターンと一致するテキストが含まれます
の後に次の文が続きます: $matches[1] は最初のキャプチャ サブグループと一致するテキストが含まれます、など 意味 のみである必要があります。実行されるグローバル マッチングではなく、アンチキャプチャ (つまり、かっこで囲まれたコンテンツ) を含めるため、グローバル マッチングを実行するには preg_match_all を使用します また、正規表現では先頭に ^ が追加されます。これは、文字列を意味します。 matched は ^ の後のコンテンツで始まる必要があるため、 は一致できません
同様に、$ は、一致する文字列が $ より前で終了する必要があることを意味します。したがって、コンテンツと一致するには、$_content=''; または $_content='';
$_content='<!-- Layout name="header" --><!-- Layout name="footer" -->';preg_match_all('//', $_content, $matches);print_r($matches);/*Array( [0] => Array ( [0] => [1] => ) [1] => Array ( [0] => header [1] => footer ))*/
$_content =<<< HTML<!-- Layout name="header" --><!-- Layout name="footer" -->HTML;preg_match( '/^<!--\sLayout\sname\s*=\s*"(.*)"\s-->/', $_content, $matches);print_r($matches);
それはあなたが自分で混乱しているだけです
$matches[0] はテキストモードでのみ表示できる HTML タグです
Array( [0] => <!-- Layout name="header" --> [1] => header)
$matches[0] には完全なパターン
に一致するテキストが含まれ、その後に次の文が続きます: $matches[1] には最初にキャプチャしたサブグループに一致するテキストが含まれます など。実行されるグローバル マッチングではなく、アンチキャプチャ (つまり、括弧で囲まれたコンテンツ) のみを含める必要があるため、グローバル マッチングを実行するには preg_match_all を使用します また、正規表現の前に ^ を追加することを意味します。一致する文字列は ^ の後のコンテンツから始まる必要があるため、 は一致できません
同様に、$ は一致する文字列の末尾が $ で始まる必要があることを意味します。コンテンツに一致します。 $_content=''; または $_content=' '; to
解決してほしい問題がもう 1 つあります
文字列があります
$_content='<!-- Layout name="header" --><!-- Layout name="footer" -->';preg_match_all('//', $_content, $matches);print_r($matches);/*Array( [0] => Array ( [0] => [1] => ) [1] => Array ( [0] => header [1] => footer ))*/
文字列が bbs で始まらない場合は、一致させます
たとえば、
$string = 'bbs/csdn/net/xxx';
bbs で始まらないため、続けてくださいmatch
方法を考えました 書き方
$string = 'www/csdn/net/xxx';
でも、この効率は少し低いような気がします 最適化できないかな?
^ はマッチングする入力文字列の開始位置です。 マッチング対象の文字列が ^ 以降の内容で始まらない場合はマッチングは一切行われません
文字列が始まらないとだけ判断した場合bbs
だと、こっちのほうが早い
^ はマッチングする入力文字列の開始位置で、マッチング対象の文字列が ^ 以降の内容で始まらない場合、マッチングは全く行われません
文字列が bbs で始まっていないと判断されるだけです
、このように比較してください 高速
preg_match( '#((?!bbs/).)*#', 'www/csdn/net/xxx/', $matches);
いや、実際には Django のような URL ルーティング関数を書きたいのですが、上記の方法に従うと、スケーラビリティは強くありません。もう十分なので、正規表現を使いたいです
$str='/bbs/www/csdn/net/xxx/';if(strpos($str,'bbs')!=0 || strpos($str,'bbs')===false){ //等于0就是以bbs开头,未找到返回false(全等于false) echo 'exe';}

ホット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ロギングは、Webアプリケーションの監視とデバッグ、および重要なイベント、エラー、ランタイムの動作をキャプチャするために不可欠です。システムのパフォーマンスに関する貴重な洞察を提供し、問題の特定に役立ち、より速いトラブルシューティングをサポートします

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

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