當前位置: 首頁> 最新文章列表> stripos 可以匹配多個關鍵詞嗎? PHP 中如何實現多個關鍵詞的模糊查找?

stripos 可以匹配多個關鍵詞嗎? PHP 中如何實現多個關鍵詞的模糊查找?

M66 2025-07-28

在PHP 中, stripos()函數用於查找一個字符串在另一個字符串中首次出現的位置,並且不區分大小寫。如果你想要在PHP 中實現多個關鍵詞的模糊查找,那麼如何處理多個關鍵詞的匹配呢?這個問題有些複雜,因為stripos()本身並不支持一次性匹配多個關鍵詞,它只支持單一的關鍵詞查找。

1. 使用stripos()查找單個關鍵詞

首先,了解一下stripos()的基本用法:

 <?php
$haystack = "Welcome to m66.net, the best place to learn PHP!";
$needle = "m66.net";

$position = stripos($haystack, $needle);

if ($position !== false) {
    echo "Found '$needle' at position $position";
} else {
    echo "'$needle' not found";
}
?>

在上面的代碼中,我們使用stripos()查找字符串$haystack中的$needle ,並且返回其位置。如果匹配成功,它會返回關鍵詞在字符串中的起始位置;如果沒有匹配到,返回false

2. 如何使用stripos()實現多個關鍵詞的模糊查找?

要實現多個關鍵詞的模糊查找,最簡單的做法是使用stripos()循環遍歷每個關鍵詞。如果找到了其中一個關鍵詞,就可以返回匹配的結果。我們可以這樣做:

 <?php
$haystack = "Welcome to m66.net, the best place to learn PHP!";
$needles = ["m66.net", "PHP", "programming"];

foreach ($needles as $needle) {
    $position = stripos($haystack, $needle);
    
    if ($position !== false) {
        echo "Found '$needle' at position $position\n";
    } else {
        echo "'$needle' not found\n";
    }
}
?>

上面的代碼會依次檢查數組$needles中的每個關鍵詞,並通過stripos()查找是否存在匹配。如果找到了某個關鍵詞,它就會輸出匹配信息。

3. 擴展:匹配多個關鍵詞並返回所有位置

如果你想要返回所有關鍵詞的位置,而不是只找第一個匹配項,你可以將所有匹配項的位置存儲在一個數組中:

 <?php
$haystack = "Welcome to m66.net, the best place to learn PHP! Check out m66.net for more.";
$needles = ["m66.net", "PHP"];
$matches = [];

foreach ($needles as $needle) {
    $position = stripos($haystack, $needle);
    
    while ($position !== false) {
        $matches[] = ["keyword" => $needle, "position" => $position];
        $position = stripos($haystack, $needle, $position + 1);
    }
}

if (!empty($matches)) {
    foreach ($matches as $match) {
        echo "Found '{$match['keyword']}' at position {$match['position']}\n";
    }
} else {
    echo "No matches found";
}
?>

在上面的代碼中,我們通過while循環,查找$haystack中所有出現的關鍵詞。每次找到一個匹配項後,更新查找位置繼續尋找下一個匹配。最後,將所有匹配信息存儲在$matches數組中,並逐一輸出所有匹配結果。

4. 高級方案:使用正則表達式( preg_match()

雖然stripos()是一個非常實用的函數,但它不支持正則表達式。若你需要更複雜的匹配,比如忽略某些特殊字符或使用模式匹配, preg_match()是一個更合適的選擇。以下是使用正則表達式匹配多個關鍵詞的示例:

 <?php
$haystack = "Welcome to m66.net, the best place to learn PHP!";
$needles = ["m66.net", "PHP"];

$pattern = '/(' . implode('|', $needles) . ')/i';
preg_match_all($pattern, $haystack, $matches, PREG_OFFSET_CAPTURE);

if (!empty($matches[0])) {
    foreach ($matches[0] as $match) {
        echo "Found '{$match[0]}' at position {$match[1]}\n";
    }
} else {
    echo "No matches found";
}
?>

在這個例子中,我們使用了正則表達式的preg_match_all()函數來匹配多個關鍵詞。 implode('|', $needles)會把所有的關鍵詞連接成一個正則表達式, |表示"或" 的意思,這樣就可以在一個匹配中同時查找多個關鍵詞。 PREG_OFFSET_CAPTURE選項會返回匹配的具體位置。

總結

stripos()是一個非常簡單和高效的函數,但它只能用來查找單個關鍵詞。如果你需要查找多個關鍵詞,可以通過循環或者正則表達式來實現。如果你的需求更複雜,或者需要更靈活的模式匹配,正則表達式是一個強大的工具。

通過上述方法,你可以在PHP 中靈活地實現多個關鍵詞的模糊查找,選擇最適合自己需求的方案,幫助你提高工作效率。