目次
キャプチャグループという名前は何ですか?
preg_matchで名前付きグループを使用します
例:日付部品の抽出
preg_replaceを持つ名前のグループを使用します
例:名前の再フォーマット
なぜ名前付きグループを使用するのですか?
実用的なヒントと一般的な落とし穴
ホームページ バックエンド開発 PHPチュートリアル 数値キャプチャを超えて:「preg_match」と `preg_replace`で名前付きグループを活用する

数値キャプチャを超えて:「preg_match」と `preg_replace`で名前付きグループを活用する

Aug 04, 2025 pm 03:44 PM
PHP Regular Expressions

PHPの名前付きキャプチャグループは、数値インデックスに依存する代わりに意味のある名前を割り当てることにより、一致したテキストを抽出する明確で保守可能な方法を提供します。 1。(? pattern)または( 'name'pattern)構文を使用して、PCREで指定グループを定義します。 2。preg_matchでは、キャプチャされたグループは$ matches ['name']を介してアクセスでき、数値インデックスよりも読みやすさが向上します。 3。preg_replaceで、$ nameではなく、交換用文字列に\ g を持つグループの名前付きグループ。 4。名前のグループは、特にパターンが変化する場合、コードの明確さ、保守性、およびコラボレーションを強化します。 5.グループ名の重複を避け、一貫した命名規則を使用します。 6。名前のグループは、\ g を使用して同じ正規表現内で参照できます。 7。PREG_REPLACE_CALLBACKでは、名前で$ Matchアレイを介してグループに名前を付けたグループにアクセスします。 8。名前のグループにはパフォーマンスペナルティがなく、ログ解析や入力検証などのタスクの堅牢性が大幅に向上します。数値から指定されたグループに切り替えると、エラーが減少し、正規表現がすぐに明確になります。

数値キャプチャを超えて:「preg_match」と `preg_replace`で名前付きグループを活用する

PHPで正規表現を使用する場合、試合の一部をキャプチャすることは一般的なタスクです。数値キャプチャグループ( $1$2など)は簡単ですが、複雑なパターンでは管理が難しくなる可能性があります。それは、名前が輝くグループが輝いている場所です。明確さ、保守性、より読みやすいコードを拡大します。

数値キャプチャを超えて:「preg_match」と `preg_replace`で名前付きグループを活用する

キャプチャグループという名前は何ですか?

名前付きグループを使用すると、正規表現パターン内のキャプチャされたサブストリングに名前を割り当てることができます。数値位置(例えば、 $1 )で一致するのではなく、意味のあるラベル(例: $nameまたは${username} )でそれらを参照します。

PCREの名前付きグループの構文(PHPのpreg_*関数で使用されるperl互換の正規表現)は次のとおりです。

数値キャプチャを超えて:「preg_match」と `preg_replace`で名前付きグループを活用する
 (?<name>パターン)

または、または:

 (? &#39;name&#39;pattern)

どちらも同等です。名前は有効な識別子でなければなりません(文字、数字、アンダースコア、スペースなし)。

数値キャプチャを超えて:「preg_match」と `preg_replace`で名前付きグループを活用する

preg_matchで名前付きグループを使用します

preg_match 、アレイで一致したグループを保存し、名前付きグループが使用されると、インデックスと名前の両方で表示されます。

例:日付部品の抽出

$ subject = "今日は2024-05-15"です。
$ pattern = &#39;/(?<ear> \ d {4}) - (?<month> \ d {2}) - (?<day> \ d {2})/&#39;;

if(preg_match($ pattern、$ subject、$ matches)){
    エコー「年:」。 $ matches [&#39;year&#39;]。 "\ n"; // 2024
    エコー「月:」。 $ matches [&#39;month&#39;]。 "\ n"; // 05
    エコー「日:」。 $ matches [&#39;day&#39;]。 "\ n"; // 15
}

ここで、 $matchesは次のものが含まれます。

  • $matches[0] →フルマッチ: 2024-05-15
  • $matches[&#39;year&#39;]$matches[&#39;month&#39;]$matches[&#39;day&#39;] →それぞれのキャプチャされた部分

これは、特にパターンが進化する場合、 $matches[1]$matches[2]などを使用するよりもはるかに明確です。


preg_replaceを持つ名前のグループを使用します

preg_replace 、交換用文字列の背景をサポートします。名前付きグループを使用すると、 \g{name}構文を使用してそれらを参照できます。

注: $1とは異なり、 preg_replace$name直接使用することはできません\g{name}を使用する必要があります。

例:名前の再フォーマット

$ subject = "doe、john";
$ pattern = &#39;/(?<last> [^、])、\ s*(?<first> \ w)/&#39;;
$ facterment = &#39;\ g <first> \ g <last>&#39;;

echo preg_replace($ pattern、$ facterment、$ subject);
//出力:John Doe

\g<first>および\g<last>を使用すると、各部分が表すものを明確にします。

または、数値の背景( \1\2 )を使用することもできますが、名前が付けられたものを改善し、正規表現を変更するときにエラーを減らすことができます。


なぜ名前付きグループを使用するのですか?

  1. 読みやすさyearusernamedomainなどの名前は自己文書化されています。
  2. 保守性:グループを追加または並べ替えた場合、名前付き参照は有効なままです。数字のものが壊れます。
  3. デバッグ$matchesを検査するとき、名前の名前はキャプチャされたものを理解しやすくします。
  4. チームのコラボレーション:他の開発者は、あなたのregexの意図をより速く理解することができます。

実用的なヒントと一般的な落とし穴

  • 重複した名前を避けてください:PCREは同じパターンで繰り返されるグループ名を許可していません。一意の名前を使用します。

  • 一貫した命名を使用します:読みやすくするために、コンベンション(snake_caseなど)に固執します。

  • パターンの背景:regexの内部でも\g<name>を使用できます。

     //繰り返される単語を一致させます
    preg_match( &#39;/\ b(?<word> \ w)\ s \ g <word> \ b/&#39;、 &#39;the the&#39;、$ m);
  • preg_replace_callbackpreg_matchのように、名前付きグループにアクセスできます:

     $ result = preg_replace_callback(
        &#39;/hello(?<name> \ w)/&#39;、
        function($ mate){
            「こんにちは」を返します。 ucfirst($ match [&#39;name&#39;]);
        }、
        「こんにちはアリス」
    );
    //結果:「こんにちはアリス」

    名前のグループは、パフォーマンスオーバーヘッドを追加せず、正規表現コードを大幅に堅牢にします。ログを解析したり、URLを書き換えたり、入力を検証したりするかどうかにかかわらず、プレーンな括弧の代わりに(?<name>...)</name>を使用してすぐに消去されます。

    基本的に、 $2言及しているものを把握するために括弧をカウントしている場合は、名前付きグループに切り替える時が来ました。

    以上が数値キャプチャを超えて:「preg_match」と `preg_replace`で名前付きグループを活用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

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)

ホットトピック

`u`モディファイアを解き放つ:PHPでユニコード認識の正規表現に深く潜る `u`モディファイアを解き放つ:PHPでユニコード認識の正規表現に深く潜る Aug 03, 2025 am 06:39 AM

TheumodifierinPHPregexisessentialforproperUTF-8andUnicodesupport.1.ItensuresthepatternandinputstringaretreatedasUTF-8,preventingmisinterpretationofmulti-bytecharacters.2.Withoutu,characterslikeéoremojismaycausemismatchesorfailuresbecausetheengineread

数値キャプチャを超えて:「preg_match」と `preg_replace`で名前付きグループを活用する 数値キャプチャを超えて:「preg_match」と `preg_replace`で名前付きグループを活用する Aug 04, 2025 pm 03:44 PM

namedcapturegroupsinphpprovideaclearandmaintainablewwaytoextractmatchedtextbyasingingmandinginsteadinsteadedofrelyingonnumericindices.1.use( 'name'pattern)syntaxtodefineNenamedgroupsinpcre.2.inpreg_match

複雑な文字列アサーションの見た目と見た目を習得します 複雑な文字列アサーションの見た目と見た目を習得します Aug 04, 2025 am 06:35 AM

ポジティブアサーション(?= ...)、ネガティブアサーション(?!...)、ポジティブアサーション(??

ネストされた構造を解析するためのPCREの再帰パターン ネストされた構造を解析するためのPCREの再帰パターン Aug 11, 2025 am 11:06 AM

pcre'sRecursivePatternSeNableMatchingNestedStructuresSolSheSORBracketsusing(?r)ornaMedReferenceslikelike(?&name)、recursively -applyingthepattern; forexample、^$$)|(?1)$$

PHPの `preg_match_all`を使用して堅牢なログファイルパーサーを作成します PHPの `preg_match_all`を使用して堅牢なログファイルパーサーを作成します Aug 03, 2025 am 09:20 AM

preg_match_all関数を使用して、正規表現と協力して、PHPログファイルを効率的に解析します。 1.最初に、ApacheのCLFなどのログ形式を分析します。 2。名前付きキャプチャグループを使用して通常のパターンを構築して、IP、メソッド、パス、その他のフィールドを抽出します。 3. preg_match_allを使用してpreg_set_orderフラグと協力して、バッチでマルチラインログを解析します。 4.フィールドの欠落や交差列ログなどのエッジケースを処理します。 5.抽出されたデータを変換して入力し、最後に非構造化されたログを構造化された配列データに変換して、さらに処理します。

アプリケーションの確保:効率的な修復的なRedos攻撃の防止 アプリケーションの確保:効率的な修復的なRedos攻撃の防止 Aug 13, 2025 pm 03:17 PM

ReDoSattacksexploitinefficientregexpatternstocausedenialofserviceviaexcessiveCPUuse.1.Avoidnestedquantifierslike(a ) bysimplifyingtoa .2.Useatomicgroups(?>...)topreventbacktracking.3.Limitinputlengthbeforeregexevaluation.4.Avoidcomplexregexesincri

獣を飼いならす:PCREでの壊滅的なバックトラッキングを緩和する 獣を飼いならす:PCREでの壊滅的なバックトラッキングを緩和する Aug 03, 2025 am 07:17 AM

catastrophicbacktrackingCurswhennestedgreedyquantifierscauseexponentialbacktrackingonfailedmatches、asin^(a)$ ang "aaaax" .2。

複雑な交換に `preg_replace` vs.` preg_replace_callback_array`を使用するとき 複雑な交換に `preg_replace` vs.` preg_replace_callback_array`を使用するとき Aug 08, 2025 pm 06:10 PM

usepreg_replaceforsimpeltimpatternswapswithtaticReplacementsorbackReferences.2.usepreg_replace_callback_arrayformultiplepatternsRequiringcustomlogicviacallbacks、特にwhen replacementsdependentent、infunctions、infuneditionalling

See all articles