首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 字串搜尋:strstr() 與 strpos() 實用指南

     編輯:PHP 相關知識

strstr() - 取得子字串 (從找到處到結尾)

語法

strstr(string $haystack, string $needle, bool $before_needle = false): string|false
  • $haystack:被搜尋的字串
  • $needle:搜尋目標 (若為整數,視為字元的 ASCII 值)
  • $before_needle:若為 true,回傳找到處 之前 的部分 (PHP 5.3+)

範例

<?php
echo strstr("明日編程詞典", "編") . "<br>";      // 編程詞典
echo strstr("www.111c.net", "111") . "<br>";      // 111c.net
echo strstr("0431-84972266", "8") . "<br>";       // 84972266
// $before_needle 範例
echo strstr("user@example.com", "@", true) . "<br>"; // user
?>

strpos() - 取得位置索引 (整數)

語法

strpos(string $haystack, string $needle, int $offset = 0): int|false
  • $offset:從指定位置開始搜尋 (可為負數,表示從結尾倒數)

範例

<?php
$pos = strpos("Hello world!", "wo");
echo $pos . "<br>"; // 6

// 正確判斷是否找到
$str = "abcdef";
if (strpos($str, "a") !== false) { echo "找到 'a' 於位置 0<br>"; }
if (strpos($str, "z") === false) { echo "找不到 'z'<br>"; }

// 從指定位置搜尋
echo strpos("abcabc", "a", 2) . "<br>"; // 3 (從索引 2 開始找下一個 a)
?>

關鍵差異比較

特性strstr()strpos()
回傳值子字串 (含 needle) / false索引位置 (int) / false
主要用途擷取關鍵字後的內容判斷是否存在、計算位置、配合 substr() 切割
大小寫敏感是 (對應 stristr())是 (對應 stripos())
多位元組支援否 (用 mb_strstr())否 (用 mb_strpos())

實務應用範例

1. 解析 Email 使用者名稱

$email = "user.name@example.com";
$username = strstr($email, "@", true); // PHP 5.3+
// 或
$username = substr($email, 0, strpos($email, "@"));

2. 檢查關鍵字是否存在 (效能較佳)

if (strpos($content, "敏感詞") !== false) {
    // 處理違規內容
}

3. 取得最後一次出現位置

$lastSlash = strrpos($url, "/");
$filename = substr($url, $lastSlash + 1);

總結

  • 需「取得子字串」用 strstr() / strrchr()。
  • 需「判斷存在」或「取得位置」用 strpos() / strrpos() (記得 === false)。
  • 處理 UTF-8 中文請改用 mb_strpos(), mb_strstr() 等 mbstring 函式。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved