當前位置: 首頁> 最新文章列表> PHP 中的stristr 和正則表達式(preg_match)的區別是什麼?

PHP 中的stristr 和正則表達式(preg_match)的區別是什麼?

gitbox 2025-06-22

一、stristr() 函數

stristr()是PHP 內置的字符串函數,它用於查找某個字符串在另一個字符串中首次出現的位置,並返回該位置及其後面的部分。 stristr()是不區分大小寫的,即它會忽略字母的大小寫差異。

文法:

 <span><span><span class="hljs-title function_ invoke__">stristr</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-keyword">mixed</span></span><span> </span><span><span class="hljs-variable">$needle</span></span><span>, </span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-variable">$before_needle</span></span><span> = </span><span><span class="hljs-literal">false</span></span><span>): </span><span><span class="hljs-keyword">string</span></span><span>|</span><span><span class="hljs-literal">false</span></span><span>
</span></span>
  • $haystack :待搜索的字符串。

  • $needle :需要查找的子字符串。

  • $before_needle :如果設置為true ,則返回needle前面的部分,默認是返回needle後面的部分。

示例:

 <span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"Hello World!"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stristr</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-string">"world"</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>;  </span><span><span class="hljs-comment">// 輸出 "World!"</span></span><span>
</span></span>

在這個例子中, stristr()會忽略大小寫,所以它能夠匹配到"world" 並返回"World!"。

二、preg_match() 函數

preg_match()是PHP 中用於進行正則表達式匹配的函數,它可以根據提供的正則表達式來匹配字符串。與stristr()不同, preg_match()允許使用強大的正則表達式規則來進行更複雜的匹配操作。該函數不僅支持大小寫不敏感的匹配,還支持多種其他的匹配模式,如字符類、量詞、邊界條件等。

文法:

 <span><span><span class="hljs-title function_ invoke__">preg_match</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$pattern</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$subject</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> &amp;</span><span><span class="hljs-variable">$matches</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$flags</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$offset</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>): </span><span><span class="hljs-keyword">int</span></span><span>|</span><span><span class="hljs-literal">false</span></span><span>
</span></span>
  • $pattern :正則表達式模式。

  • $subject :待匹配的字符串。

  • $matches :如果匹配成功,返回匹配的結果。

  • $flags :標誌位,控制匹配行為。

  • $offset :匹配的起始位置。

示例:

 <span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"Hello World!"</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">preg_match</span></span><span>(</span><span><span class="hljs-string">"/world/i"</span></span><span>, </span><span><span class="hljs-variable">$string</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"匹配成功"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"匹配失敗"</span></span><span>;
}
</span></span>

在這個例子中, preg_match()使用正則表達式/world/i來匹配字符串"Hello World!"。 i標誌表示大小寫不敏感,因此即使是"world" 的大小寫不同,也能夠成功匹配。

三、 stristr()preg_match()的區別

  1. 功能複雜度

    • stristr()是一個簡單的字符串搜索函數,適用於簡單的查找任務。它只需要兩個參數:要查找的字符串和目標字符串。匹配規則非常簡單,主要關注子字符串的查找,支持大小寫不敏感。

    • preg_match()則是一個功能更強大的函數,能夠使用正則表達式進行複雜的匹配,可以處理更多樣化的字符串匹配任務。你可以指定複雜的模式、字符類、量詞等,更加靈活。

  2. 性能差異

    • 由於stristr()的功能較為簡單,通常在性能上較preg_match()更優。特別是當只需要進行簡單的子字符串查找時, stristr()性能上更加高效。

    • preg_match()需要解析正則表達式,進行更複雜的模式匹配,因此在性能上相對較慢,特別是在處理非常大的字符串或複雜的正則表達式時。

  3. 返回值的不同

    • stristr()在找到匹配時返回目標字符串中從匹配位置到字符串末尾的部分。如果沒有找到匹配,則返回false

    • preg_match()如果成功匹配,會返回1,失敗時返回0,並且可以通過$matches參數返回更多的匹配信息(如匹配的子串、捕獲的分組等)。

  4. 正則表達式的支持

    • stristr()不支持正則表達式,匹配功能較為有限,只能執行簡單的字符匹配。

    • preg_match()支持完整的正則表達式,可以進行模式匹配、分組、反向引用等複雜的操作。

四、使用場景

  • stristr()使用場景
    適用於簡單的子字符串查找操作,特別是在你只需要查找某個固定的子字符串時。由於其性能較好,因此適用於性能要求較高的場景。

  • preg_match()使用場景
    適用於復雜的模式匹配,尤其是當你需要使用正則表達式對字符串進行複雜的解析、驗證或替換操作時。 preg_match()能夠提供更多的匹配控制和靈活性。