易百教程

PHP使用strpos()和strrpos()定位文本

在PHP中,要找出在另一个字符串中出现文本字符串的索引偏移量,可使用strpos()

strstr()函数有两个参数:

  • 要搜索的字符串
  • 要查找的搜索文本。

如果找到字符串,strpos()将返回字符串中文本的第一个字符的索引。
如果找不到字符串,strpos()返回false:

<?php
    $myString = "Hello, world!";
    echo strpos( $myString, "wor" ); // 显示 '7'
    echo strpos( $myString, "xyz" ); // 显示 '(false)
?>

当搜索到的文本出现在字符串的开头时,strpos()返回0。如果不注意,很容易将误认为它的返回值是false
例如,以下代码将错误地显示“Not found”:

<?php
    $myString = "Hello, world!";
    if ( !strpos( $myString, "Hel" ) ) echo "Not found";
?>

执行上面示例代码,得到以下结果:

Not found

要明确测试错误的返回值。以下代码正常工作:

示例代码

<?php
    $myString = "Hello, world!";
    if ( strpos( $myString, "Hel" ) === false ) echo "Not found";
?>

strpos()可使用可选的第三个参数:字符串中的索引位置以开始搜索。如下示例:

<?php
$myString = "Hello, world!";
echo strpos( $myString, "o" ) . " \n";    // 显示 '4'
echo strpos( $myString, "o", 5 ) . " \n"; // 显示 '8'
?>

执行上面示例代码,得到以下结果:

4
8

可以使用第三个参数查找字符串中所有出现的搜索文本:

<?php
$myString = "Hello, world!";
$pos = 0;// 
while ( ( $pos = strpos( $myString, "l", $pos ) ) !== false ) {
    echo "The letter'l'was found at position: $pos \n ";
    $pos++;
}
?>

执行上面示例代码,得到以下结果:

The letter'l'was found at position: 2
The letter'l'was found at position: 3
The letter'l'was found at position: 10

strpos()有一个相类似函数strrpos(),它们基本上功能相同; 唯一的区别是strrpos()找到字符串中的最后一个匹配,而不是第一个匹配:

<?php
$myString = "Hello, world!";
echo strpos( $myString, "o" ) . " \n ";  // 显示'4'
echo strrpos( $myString, "o" ) . " \n "; // 显示'8'
?>

执行上面示例代码,得到以下结果:

4
8

使用strpos(),可以传递一个可选的第三个参数,指示从字符串的开始搜索的索引位置。如果此索引位置为负,则strrpos()从字符串末尾多个字符开始搜索。