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

PHP 字串搜尋函式比較:strstr、strrchr、strpos、strrpos

     編輯:PHP 相關知識

函式對照表

函式搜尋方向回傳值型別說明
strstr()左至右 (首次出現)字串 / false回傳從找到處到字串結尾的子字串
strrchr()右至左 (最後一次出現)字串 / false回傳從找到處到字串結尾的子字串
strpos()左至右 (首次出現)整數 (位置) / false回傳位置索引 (0 起算),需用 === false 判斷失敗
strrpos()右至左 (最後一次出現)整數 (位置) / false回傳位置索引,需用 === false 判斷失敗

程式碼範例與輸出

<?php
// 1. strstr / strrchr 回傳子字串
$str = "天高任鳥飛,海闊憑魚躍";
echo "原始字串:$str<br>";
echo 'strstr($str, ",") => ' . strstr($str, ",") . "<br>";  // 輸出:,海闊憑魚躍
echo 'strstr($str, "鳥飛") => ' . strstr($str, "鳥飛") . "<br>"; // 輸出:鳥飛,海闊憑魚躍

$str1 = "I have a great dream.";
echo "<br>原始字串:$str1<br>";
echo 'strrchr($str1, "e") => ' . strrchr($str1, "e") . "<br>";  // 輸出:eam.
echo 'strrchr($str1, "ve") => ' . strrchr($str1, "ve") . "<br>"; // 輸出:ve dream.

// 2. strpos / strrpos 回傳索引位置
$str2 = "I am an abstract about abroad.";
echo "<br>原始字串:$str2<br>";
echo 'strpos($str2, "ab") => ' . strpos($str2, "ab") . "<br>";   // 8
echo 'strpos($str2, "am") => ' . strpos($str2, "am") . "<br>";   // 2
echo 'strpos($str2, "aman") => ' . strpos($str2, "aman") . "<br>"; // false (找不到)

$str3 = "I am is wang hui.";
echo "<br>原始字串:$str3<br>";
echo 'strrpos($str3, "I") => ' . strrpos($str3, "I") . "<br>";  // 0
echo 'strrpos($str3, "an") => ' . strrpos($str3, "an") . "<br>"; // 4
echo 'strrpos($str3, "i") => ' . strrpos($str3, "i") . "<br>";   // 13 (最後一個 i)
?>

重要提醒

  • 大小寫敏感:以上函式皆區分大小寫。不分大小寫版本請用 stristr(), stripos(), strripos() (無 strrichr)。
  • strpos/strrpos 判斷失敗:因為可能回傳 0 (第一個字元),必須使用 === false 嚴格比較,不可用 if (!$pos) 或 == false。
  • strstr() 從 PHP 5.3 起支援第三個參數 $before_needle (為 true 時回傳找到處之前的部分)。
  • 處理多位元組字串 (UTF-8 中文) 時,建議使用 mb_strpos(), mb_strrpos(), mb_strstr() 等 mbstring 對應函式,避免位置索引錯誤。

適用情境

  • strstr/strrchr:需要取得「關鍵字之後的內容」(如解析 Email 域名 strstr($email, '@'))。
  • strpos/strrpos:需要判斷「是否包含」或「出現位置」以進行切割、替換等操作。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved