字符截取函数

技术笔记 - PHP - PHP函数

发布时间:2020-02-02 21:59:16

admin 于  2020-02-02 21:59:16 编辑

substr() | strstr() / stristr() | strrchr() | strpos() | strrpos() | mb_substr() / mb_strcut()

1.substr()

返回字符串的提取部分,若失败则返回FALSE,或者返回一个空字符串。

语法

substr(string,start,length)
参数 描述
string 必需。规定要返回其中一部分的字符串。
start

必需。规定在字符串的何处开始。

  • 正数 - 在字符串的指定位置开始
  • 负数 - 在从字符串结尾开始的指定位置开始
  • 0 - 在字符串中的第一个字符处开始
length

可选。规定被返回字符串的长度。默认是直到字符串的结尾。

  • 正数 - 从 start 参数所在的位置返回的长度
  • 负数 - 从字符串末端返回的长度

实例

$str = 'abcdefabcdef';
echo substr($str, 0, 5) . PHP_EOL;// abcde,从首部开始截取5位
echo substr($str, 0, -3) . PHP_EOL;// abcdefabc,从首部开始截取-3位
echo substr($str, -2) . PHP_EOL;// ef,从尾部开始截取2位
echo substr($str, -5, 3) . PHP_EOL;// bcd,从尾部第5位开始截取3位
echo substr($str, -5, -1) . PHP_EOL;// bcde,从尾部第5位开始截取-1位

2.strstr()

返回字符串的剩余部分(从匹配点)。如果未找到所搜索的字符串,则返回FALSE

语法

strstr(string,search,before_search)
参数 描述
string 必需。规定被搜索的字符串。
search

必需。规定所搜索的字符串。

如果此参数是数字,则搜索匹配此数字对应的 ASCII 值的字符。

before_search

可选。默认值为 "false" 的布尔值。

如果设置为 "true",它将返回 search 参数第一次出现之前的字符串部分。

实例

$str = 'abcdefabcdef';
echo strstr($str, 'c') . PHP_EOL;// cdefabcdef,返回第一次出现位置后面的字符串,包括c
echo strstr($str, 'c', true);// ab,返回第一次出现位置后面的字符串,不包括c

注释

该函数是不区分大小写的。如需进行区分大小写的搜索,请使用stristr()函数。

3.strrchr()

返回从某个字符串在另一个字符串中最后一次出现的位置到主字符串结尾的所有字符,如果未找到此字符,则返回FALSE

语法

strrchr(string,char)
参数 描述
string 必需。规定要返回其中一部分的字符串。
char 必需。规定要查找的字符。如果该参数是数字,则搜索匹配此数字的 ASCII 值的字符。

实例

$str = 'abcdefabcdef';
echo strrchr($str, 'c');// cdef,返回最后一次出现位置后面的字符串,包括c

4.strpos()

返回字符串在另一字符串中第一次出现的位置,如果没有找到字符串则返回FALSE

语法

strpos(string,find,start)
参数 描述
string 必需。规定要搜索的字符串。
find 必需。规定要查找的字符串。
start 可选。规定在何处开始搜索。

实例

$str = 'abcdefabcdef';
echo strpos($str, 'e') . PHP_EOL;// 4,字符串位置是从0开始
echo strpos($str, 'e',3) . PHP_EOL;// 4,从第3位开始查找
echo strpos($str, 'e',11);// false,从第11位开始查找

5.strrpos()

返回字符串在另一字符串中最后一次出现的位置,如果没有找到字符串则返回FALSE

语法

strrpos(string,find,start)
参数 描述
string 必需。规定要搜索的字符串。
find 必需。规定要查找的字符串。
start 可选。规定在何处开始搜索。

实例

$str = 'abcdefabcdef';
echo strrpos($str, 'e') . PHP_EOL;// 10,字符串位置是从0开始
echo strrpos($str, 'e', 4) . PHP_EOL;// 10,从第4位开始查找
echo strrpos($str, 'e', 11) . PHP_EOL;// false,从第11位开始查找
echo strrpos($str, 'e',-5);// 4,从尾部第5位开始查找

6.mb_substr()/mb_strcut()

语法

mb_substr(string,start,length,encoding)
mb_strcut(string,start,length,encoding)
参数 描述
string 必需。规定要返回其中一部分的字符串。
start 必需。规定在字符串的何处开始。
  • 正数 - 在字符串的指定位置开始
  • 负数 - 在从字符串结尾的指定位置开始
  • 0 - 在字符串中的第一个字符处开始
length 可选。规定要返回的字符串长度。默认是直到字符串的结尾。
  • 正数 - 从 start 参数所在的位置返回
  • 负数 - 从字符串末端返回
encoding

可选。字符编码。如果省略,则使用内部字符编码。

实例

$str = '我是一串比较长的中文abcdef';
echo "mb_substr:" . mb_substr($str, 0, 7, 'utf-8'); //首部开始截取,“我是一串比较长”
echo "mb_strcut:" . mb_strcut($str, 0, 7, 'utf-8'); //首部开始截取,“我是一”

echo "mb_substr:" . mb_substr($str, 0, 12, 'utf-8'); //首部开始截取,“我是一串比较长的中文ab”
echo "mb_strcut:" . mb_strcut($str, 0, 22, 'utf-8'); //首部开始截取,“我是一串比较长的中文ab”

注意

要启用mb_substr/mb_strcut需要在 php.ini 开启php_mbstring.dll

注释

mb_strcut()mb_substr()类似,都是从字符串中提取子字符串,但是按字节数来执行,而不是字符个数。

如果截断位置位于多字节字符两个字节的中间,将于该字符的第一个字节开始执行。

这也是和substr()函数的不同之处,后者简单地将字符串在字节之间截断,这将导致一个畸形的字节序列。

转载声明:本站文章无特别说明,皆为原创,版权所有,转载请注明:Dy大叔的日常

转载自 字符截取函数 | XDY.ME@Dy大叔的日常

XDY.ME@Dy大叔的日常