現在の位置: ホーム> 最新記事一覧> preg_replace_callback_arrayの一般的な正規表現記述エラーは何ですか?これらの落とし穴は避けてください

preg_replace_callback_arrayの一般的な正規表現記述エラーは何ですか?これらの落とし穴は避けてください

gitbox 2025-09-04

<span><span><span class="hljs-meta"><?php</span></span><span> </span><span><span class="hljs-comment">// 这部分内容与文章正文无关,可以是任意PHP代码示例</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">dummyFunction</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) { </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-string">"Hello, this is a dummy function."</span></span><span>; } </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">dummyFunction</span></span><span>(); </span><span><span class="hljs-meta">?></span></span><span> <hr> <preg_replace_callback_array中常见的正则表达式写法错误有哪些?避免这些坑></p> <p>在PHP中,<code>preg_replace_callback_array

常にセパレーターを正規表現に追加し、前後にセパレーターを一致させることを忘れないでください。

2。エスケープキャラクターの使用のエラー

正規表現の多くの特殊文字を逃れる必要があります。特に、PHPストリングで常連を書く場合、バックスラッシュ自体も逃げる必要があり、それが二重脱出エラーにつながります。

 
</span><span><span class="hljs-variable">$patterns</span></span><span> = [
    </span><span><span class="hljs-string">'/\\d+/'</span></span><span> => </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$matches</span></span></span><span>) { </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$matches</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>]; }, </span><span><span class="hljs-comment">// 正しい,PHP文字列で\\シングルを表します\</span></span><span>
    </span><span><span class="hljs-string">'/\d+/'</span></span><span>  => </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$matches</span></span></span><span>) { </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$matches</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>]; }, </span><span><span class="hljs-comment">// 正しい,单引号文字列で\直接効果的</span></span><span>
    </span><span><span class="hljs-string">"/\d+/"</span></span><span>  => </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$matches</span></span></span><span>) { </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$matches</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>]; }, </span><span><span class="hljs-comment">// 正しい,双引号文字列で\d識別できます</span></span><span>
    </span><span><span class="hljs-string">"/\d+/"</span></span><span>  => </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$matches</span></span></span><span>) { </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$matches</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>]; }, </span><span><span class="hljs-comment">// 一般的なエラーは次のように記述されています "/\\d+/" 一致する障害を引き起こします</span></span><span>
];

避けてください:単一の引用符を使用して、正規表現をラップし、脱出の複雑さを減らすか、二重引用符と単一の引用を慎重に区別します。

3。職務不能で指名されたグループを使用することに関する誤解

多くの開発者は、一致するときにグループの数を減らしたい、または名前付きグループを使用したいと考えていますが、標準化されたライティングではなく、マッチング障害を引き起こします。

 
</span><span><span class="hljs-comment">// 非難されていないグループ</span></span><span>
</span><span><span class="hljs-string">'/foo(?:bar)/'</span></span><span>   </span><span><span class="hljs-comment">// 正しい,(?:)非難されていないグループ化を示します</span></span><span>
</span><span><span class="hljs-string">'/foo(bar)/'</span></span><span>     </span><span><span class="hljs-comment">// グループ化をキャプチャします</span></span><span>

</span><span><span class="hljs-comment">// 名前のグループ化,正しい写法:</span></span><span>
</span><span><span class="hljs-string">'/foo(?P<name>bar)/'</span></span><span>

</span><span><span class="hljs-comment">// 間違った文章:</span></span><span>
</span><span><span class="hljs-string">'/foo(?<name>bar)/'</span></span><span>  </span><span><span class="hljs-comment">// いくつかPHPバージョンサポート,しかし、そうではありませんPCRE標準,可能な互換性</span></span><span>

避ける方法:標準の名前付きグループ化構文を使用することをお勧めします(?P ...) 、互換性の問題を避けてください。

4.正規表現構文エラー

複雑なルールを書くとき、ブラケットの不一致や量量ファイアの使用のエラーなどの構文の問題が発生する傾向があり、 preg_replace_callback_arrayの直接的なエラーまたは不一致が生じます。

 
</span><span><span class="hljs-variable">$patterns</span></span><span> = [
    </span><span><span class="hljs-string">'/(foo(bar/'</span></span><span> => </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$matches</span></span></span><span>) { </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$matches</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>]; }, </span><span><span class="hljs-comment">// ブラケットの不一致,エラーを報告します</span></span><span>
    </span><span><span class="hljs-string">'/foo+/'</span></span><span>     => </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$matches</span></span></span><span>) { </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$matches</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>]; }, </span><span><span class="hljs-comment">// 数量詞の誤った使用,+ で適用されます foo あいまいな意味を引き起こします</span></span><span>
];

回避: IDEまたはオンラインツールを使用して、正規表現を検証して、正しい構文を確保します。

5。正規表現はコールバック関数と一致しません

コールバック関数の予想されるマッチング結果は、正規表現定義と矛盾しており、コールバックでアクセスされるインデックスまたは名前付きグループ化が存在しません。

 
</span><span><span class="hljs-variable">$patterns</span></span><span> = [
    </span><span><span class="hljs-string">'/(foo)(bar)/'</span></span><span> => </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$matches</span></span></span><span>) {
        </span><span><span class="hljs-comment">// $matches[1] はい foo, $matches[2] はい bar</span></span><span>
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$matches</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>]; </span><span><span class="hljs-comment">// 存在しないインデックス,エラーを報告します</span></span><span>
    }
];

避けてください:コールバックを書くときは、定期的なキャプチャのグループ名またはインデックスを確認して、未定義のアイテムへのアクセスを防ぎます。

6.正規表現修飾子を無視します

たとえば、ケース、シングルラインモード、マルチラインモードなどを無視して、予想を満たすことなく一致する結果が得られます。

 
</span><span><span class="hljs-string">'/pattern/i'</span></span><span>  </span><span><span class="hljs-comment">// i ケースが無視されていることを示します</span></span><span>
</span><span><span class="hljs-string">'/pattern/s'</span></span><span>  </span><span><span class="hljs-comment">// s 急行 . NewLinesを一致させます</span></span><span>

</span><span><span class="hljs-comment">// 忘记加修饰符一致する障害を引き起こします</span></span><span>
</span><span><span class="hljs-string">'/pattern/'</span></span><span>   </span><span><span class="hljs-comment">// 大文字と小文字を区別</span></span><span>

避けてください:あなたのニーズに応じて修飾子を合理的に追加します。

要約します

preg_replace_callback_arrayを使用して文字列を処理する場合、正規表現を正しく記述することが重要です。一般的なエラーには、デリミターの欠落、エスケープエラー、不規則なグループ化の書き込み、構文エラー、コールバックパラメーターエラー、および修飾子の無視が含まれます。書く前に正規表現を個別にテストする習慣を開発し、デバッグツールを使用してグループ化と一致した結果を確認することで、これらの落とし穴を効果的に回避し、コードの堅牢性を向上させることができます。

この記事が、 preg_replace_callback_arrayを使用して、より信頼性の高い効率的なPHPコードを作成する際に、一般的な正規表現ライティングエラーを回避するのに役立つことを願っています。