| 函數 | 用途 | 返回值 | 大小寫敏感 | 性能 |
|---|---|---|---|---|
strstr | 查找子串首次出現,返回從該處到結尾的字符串 | 字符串/false | 是 | 快 |
stristr | strstr 不區分大小寫版 | 字符串/false | 否 | 快 |
strpos | 查找子串首次出現位置(索引) | int/false | 是 | 最快 |
stripos | strpos 不區分大小寫版 | int/false | 否 | 快 |
strrpos | 查找子串最後一次出現位置 | int/false | 是 | 快 |
preg_match | 正則表達式匹配 | 1/0/false | 按模式 | 較慢 |
<?php
$haystack = "https://www.example.com/path?query=value";
$needle = "example.com";
// 判斷是否包含
if (strstr($haystack, $needle)) {
echo "包含 $needle";
}
// 獲取域名後部分
$domainPart = strstr($haystack, '://');
echo $domainPart; // ://www.example.com/path?query=value
// 不區分大小寫
if (stristr($haystack, 'EXAMPLE')) {
echo "找到 (忽略大小寫)";
}
?>
<?php
$str = "abcdefg";
$pos = strpos($str, 'a'); // 0
// 錯誤寫法:if ($pos) -> 0 視為 false
// 正確寫法:
if ($pos !== false) {
echo "在位置 $pos 找到";
}
// 從指定位置開始查找
echo strpos($str, 'c', 2); // 2
echo strpos($str, 'c', 3); // false
?>
<?php
$pattern = '/\b(php|javascript|python)\b/i'; // 單詞邊界,忽略大小寫
$subject = "I love PHP and python.";
if (preg_match($pattern, $subject, $matches)) {
echo "匹配到: " . $matches[0]; // PHP
echo "捕獲組: " . $matches[1]; // php
}
// 全局匹配所有
preg_match_all($pattern, $subject, $allMatches);
print_r($allMatches[0]); // Array ( [0] => PHP [1] => python )
?>
\b 匹配字母/數字/下劃線與非字母數字下劃線的邊界。中文、標點不屬於單詞字符,故 \b中\b 不生效。
<?php
$str = "test,admin,abc";
// 只匹配完整單詞 admin
$pattern = '/\badmin\b/';
var_dump(preg_match($pattern, $str)); // 1
// 但這樣不行:
$str2 = "管理员admin用戶";
var_dump(preg_match('/\badmin\b/', $str2)); // 0 (中文無邊界)
// 改用前瞻後顧或 Unicode 屬性 (需 PCRE 8.34+ / u 修飾符)
?>
1:匹配成功(僅第一次)0:匹配失敗false:正則錯誤(如模式無效)<?php
$result = @preg_match('/(?invalid/', $str);
if ($result === false) {
echo "正則編譯錯誤: " . preg_last_error_msg();
}
?>
<?php
$var = 'test';
// 雙引號:解析變量、轉義序列
$pattern1 = "/$var/"; // /test/
$pattern2 = "/\b$var\b/"; // /\btest\b/ (正確)
// 單引號:字面量,變量不解析,僅 \\ \' 解析
$pattern3 = '/\b$var\b/'; // /\b$var\b/ (錯誤,字面 $var)
// 正則元字符在單引號中不需雙重轉義
$pattern4 = '/\d+/'; // 匹配數字
$pattern5 = "/\\d+/"; // 雙引號需雙重轉義
?>
strpos/stripos(最快,C 級實現)。strstr。preg_match。strpos !== false 是判斷「包含」的標準寫法。strstr 返回子串,適合「從某標記開始取內容」。preg_match 功能最強但最慢,用對場景。phpanalyze、jieba-php)。