目次
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);
ログイン後にコピー
ログイン後にコピー
は問題ありません
ホームページ バックエンド開発 PHPチュートリアル 私は正規表現に夢中なのですが、なぜ $matches[0] が空なのでしょうか?

私は正規表現に夢中なのですが、なぜ $matches[0] が空なのでしょうか?

Jun 23, 2016 pm 01:47 PM

正規表現を書きます。これは通常は一致しますが、一致した文字列全体を返すためにも必要です

正規表現は次のとおりです

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 ポイントしかあげられないのですか? 。 。

ディスカッションに返信(解決策)

あなたが自分で混乱しているだけです
$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 タグです

これで完了です! ! ! HTMLのコメントタグを忘れてしまい、本当に一晩中気を失いました。

Array(    [0] => <!-- Layout name="header" -->    [1] => header)
ログイン後にコピー
ログイン後にコピー

$matches[0] には完全なパターン
に一致するテキストが含まれ、その後に次の文が続きます: $matches[1] には最初にキャプチャしたサブグループに一致するテキストが含まれます など。実行されるグローバル マッチングではなく、アンチキャプチャ (つまり、括弧で囲まれたコンテンツ) のみを含める必要があるため、グローバル マッチングを実行するには preg_match_all を使用します また、正規表現の前に ^ を追加することを意味します。一致する文字列は ^ の後のコンテンツから始まる必要があるため、 は一致できません
同様に、$ は一致する文字列の末尾が $ で始まる必要があることを意味します。コンテンツに一致します。 $_content=''; または $_content=' '; to

まだ理解できませんが、比較が $content[0] からしか開始できないのは ^ を使用した後ですか?前の文字列が同じ場合は一致します。 $ 同じことですか?


解決してほしい問題がもう 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';}
ログイン後にコピー

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

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

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

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

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

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

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

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

PHPロギング:PHPログ分析のベストプラクティス PHPロギング:PHPログ分析のベストプラクティス Mar 10, 2025 pm 02:32 PM

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

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

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

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

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

See all articles