PHPでは、ストリップ機能は通常、文字列が最初に別の文字列に表示される場所を見つけるために使用されます。文字列でグローバル検索を実行したい場合、 Striposは最初の発生場所を返すだけであるため、直接サポートされている機能ではありません。
それでは、グローバル検索を実装するためにStripOSをどのようにシミュレートする必要がありますか?この記事では、この問題を調査し、同様の機能を実装するためのいくつかの代替案を提供します。
グローバル検索をシミュレートするために、完全な文字列が検索されるまで次のマッチング位置を絶えず見つけることにより、 Striposとsubstrを使用して結合できます。
グローバル検索をシミュレートするコード例は次のとおりです。
<?php
function globalStripos($haystack, $needle) {
$offset = 0; // 文字列の開始位置から検索を開始します
$matches = []; // 一致するすべての場所を保存するために使用されます
while (($pos = stripos($haystack, $needle, $offset)) !== false) {
$matches[] = $pos;
$offset = $pos + 1; // 現在の位置の次のキャラクターから検索を続けます
}
return $matches;
}
$text = "This is a test string. Let's test stripos function.";
$needle = "test";
$result = globalStripos($text, $needle);
print_r($result); // 一致するすべての位置を出力します
?>
この例では、 GlobalStripos関数はStripOSを使用して各一致の位置を見つけ、オフセットパラメーターを調整して、最後の一致した位置の次の文字から開始するたびに、最終的にすべてのマッチングポジションを配列と返品に保存します。
クリーナーソリューションを使用する場合は、正規表現のpreg_match_all関数を使用することを検討してください。この関数は、すべての一致の位置情報を返し、より複雑な一致を可能にします。
preg_match_allを使用してグローバル検索を実装するためのサンプルコードを次に示します。
<?php
function globalSearchWithPreg($haystack, $needle) {
$pattern = '/' . preg_quote($needle, '/') . '/i'; // 正規表現を使用します,'i' フラグは、症例が鈍感であることを示します
preg_match_all($pattern, $haystack, $matches, PREG_OFFSET_CAPTURE);
$positions = [];
foreach ($matches[0] as $match) {
$positions[] = $match[1]; // 一致する場所を取得します
}
return $positions;
}
$text = "This is a test string. Let's test preg_match_all function.";
$needle = "test";
$result = globalSearchWithPreg($text, $needle);
print_r($result); // 一致するすべての位置を出力します
?>
この例では、 preg_match_allはすべての一致を含む配列を返します。 preg_offset_captureパラメーターを介して、 preg_match_allは試合の位置情報を返し、これらの場所を抽出して返すことができます。
正規表現を使用したくない場合は、 STRSTRまたはSTRPOも実行可能な選択肢です。これらの関数はデフォルトで最初の発生を見つけることにありますが、検索開始点を調整してグローバル検索をシミュレートすることもできます。
STRSTRを使用した例は次のとおりです。
<?php
function globalSearchWithStrstr($haystack, $needle) {
$offset = 0;
$matches = [];
while (($pos = strstr(substr($haystack, $offset), $needle)) !== false) {
$matches[] = $pos;
$offset += strlen($pos) - strlen($needle) + 1; // 次の場所から引き続き検索します
}
return $matches;
}
$text = "This is a test string. Let's test strstr function.";
$needle = "test";
$result = globalSearchWithStrstr($text, $needle);
print_r($result); // 一致するすべてのサブストリングを出力します
?>
この方法では、 STRSTRを使用して、以前のStripOSシミュレーションと同様に各一致を見つけます。
StripOSをStripoSとSubstSTの組み合わせ、 preg_match_allを使用して定期的なマッチングを行う、 STRSTRおよびその他の機能を使用するなど、グローバル検索関数を実装するためにStripOSをシミュレートする方法はたくさんあります。各方法には利点と短所があり、シナリオに合ったソリューションを選択することが非常に重要です。より複雑なマッチングロジックまたは柔軟なパターンマッチングが必要な場合、通常、正規表現を使用することが最良の選択です。