當前位置: 首頁> 最新文章列表> strrchr 和strpos 有什麼區別?兩者配合使用的小技巧了解一下

strrchr 和strpos 有什麼區別?兩者配合使用的小技巧了解一下

gitbox 2025-08-27

在PHP 中,字符串操作是非常常見的任務,其中有兩個函數strrchr()strpos()經常被使用。雖然它們都能幫助開發者處理字符串,但它們的使用場景和實現方式有所不同。本文將詳細探討這兩個函數的區別,並給出一些常見的小技巧,幫助你更高效地使用這兩個函數。

1. strpos()函數

strpos()是PHP 中用來查找字符串首次出現的位置的函數。它返回字符串中第一次出現指定字符或子字符串的位置(從0開始計數)。如果沒有找到, strpos()會返回false

函數原型:

 <span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-title function_ invoke__">strpos</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">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>
  • $haystack :需要搜索的字符串。

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

  • $offset (可選):開始搜索的位置。如果未提供,默認從字符串的開頭開始。

示例代碼:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$haystack</span></span><span> = </span><span><span class="hljs-string">"Hello, world!"</span></span><span>;
</span><span><span class="hljs-variable">$needle</span></span><span> = </span><span><span class="hljs-string">"world"</span></span><span>;
</span><span><span class="hljs-variable">$position</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$position</span></span><span> !== </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"字符串 '<span class="hljs-subst">$needle</span></span></span><span>' 在 '</span><span><span class="hljs-subst">$haystack</span></span><span>' 中的位置是: </span><span><span class="hljs-subst">$position</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 class="hljs-subst">$needle</span></span></span><span>' 字符串。";
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

輸出:

 <span><span>字符串 </span><span><span class="hljs-string">'world'</span></span><span> 在 </span><span><span class="hljs-string">'Hello, world!'</span></span><span> 中的位置是: 7
</span></span>

2. strrchr()函數

strrchr()是用於查找字符串中最後一次出現指定字符或子字符串的位置的函數。與strpos()不同, strrchr()會返回從最後一個匹配字符開始到字符串結尾的部分。

函數原型:

 <span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-title function_ invoke__">strrchr</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>
  • $haystack :需要搜索的字符串。

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

示例代碼:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$haystack</span></span><span> = </span><span><span class="hljs-string">"Hello, world! Hello again!"</span></span><span>;
</span><span><span class="hljs-variable">$needle</span></span><span> = </span><span><span class="hljs-string">"Hello"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strrchr</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>);

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"從最後一次出現 '<span class="hljs-subst">$needle</span></span></span><span>' 開始的子字符串是: </span><span><span class="hljs-subst">$result</span></span><span>";
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

輸出:

 <span><span>從最後一次出現 </span><span><span class="hljs-string">'Hello'</span></span><span> 開始的子字符串是: Hello again!
</span></span>

3. strpos()strrchr()的主要區別

  • 查找方向strpos()查找字符串中第一次出現的子字符串的位置,而strrchr()查找最後一次出現的位置。

  • 返回值不同strpos()返回的是字符的索引(整數),如果沒有找到指定的字符或子字符串,則返回false 。而strrchr()返回的是從最後一次匹配位置到字符串末尾的部分字符串,如果沒有找到指定的字符或子字符串,則返回false

4. strpos()strrchr()配合使用的小技巧

有時,在實際開發中,我們可能需要同時獲取字符串中的首次和最後一次出現的字符位置。這時, strpos()strrchr()的配合使用就顯得尤為重要。以下是一些常見的技巧。

4.1 查找兩個位置之間的子字符串

假設你要提取兩個相同字符之間的子字符串,但你只知道它們分別出現在字符串的開頭和結尾。你可以使用strpos()獲取第一次出現的位置,使用strrchr()獲取最後一次出現的位置,然後通過字符串截取函數substr()來獲取它們之間的內容。

示例代碼:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$haystack</span></span><span> = </span><span><span class="hljs-string">"start-middle-end"</span></span><span>;
</span><span><span class="hljs-variable">$start_pos</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-string">"start"</span></span><span>) + </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-string">"start"</span></span><span>);
</span><span><span class="hljs-variable">$end_pos</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-string">"end"</span></span><span>);

</span><span><span class="hljs-variable">$substring</span></span><span> = </span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$start_pos</span></span><span>, </span><span><span class="hljs-variable">$end_pos</span></span><span> - </span><span><span class="hljs-variable">$start_pos</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"提取的子字符串是: <span class="hljs-subst">$substring</span></span></span><span>";
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

輸出:

 <span><span><span class="hljs-section">提取的子字符串是: -middle-</span></span><span>
</span></span>

4.2 提取最後一次出現的子字符串

有時你需要從字符串中提取最後一次出現的某個字符之後的部分內容。此時, strrchr()很有用。你可以通過strrchr()獲取從最後一次出現的字符到字符串結尾的部分,並進一步處理。

示例代碼:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$haystack</span></span><span> = </span><span><span class="hljs-string">"apple,banana,grape,orange"</span></span><span>;
</span><span><span class="hljs-variable">$last_comma</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strrchr</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-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-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$last_comma</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

輸出:

 <span><span><span class="hljs-section">最後一個逗號後的內容是: orange</span></span><span>
</span></span>

5. 總結

  • strpos()用於查找字符串中首次出現的位置,返回的是位置的索引。

  • strrchr()用於查找字符串中最後一次出現的位置,並返回從該位置到字符串結尾的子字符串。

  • 兩者結合使用,可以處理一些複雜的字符串提取和查找問題。

通過靈活運用strpos()strrchr() ,你可以更高效地進行字符串操作。掌握它們的用法,將會大大提升你編寫PHP 程序時的字符串處理能力。