PHP字符串函数之 strpos stripos strrpos strripos
2015-12-18 20:57
639 查看
PHP字符串函数之 strpos stripos strrpos strripos
strpos – 查找字符串首次出现的位置stripos – 查找字符串首次出现的位置(不区分大小写)
strrpos – 计算指定字符串在目标字符串中最后一次出现的位置
strripos – 计算指定字符串在目标字符串中最后一次出现的位置(不区分大小写)
strpos
查找字符串首次出现的位置mixed strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
在 PHP7 源码中该函数实现在string.c文件的1950行附近
参数说明
haystack在该字符串中进行查找。
needle
如果 needle 不是一个字符串,那么它将被转换为整型并被视为字符的顺序值。
offset
如果提供了此参数,搜索会从字符串该字符数的起始位置开始统计
和 strrpos()、 strripos()不一样,这个偏移量不能是负数。
返回值
成功:返回 needle 存在于 haystack 字符串起始的位置(独立于 offset)失败:如果没找到 needle,将返回 FALSE。
注意
字符串位置是从0开始,而不是从1开始的此函数可能返回布尔值 FALSE,但也可能返回等同于 FALSE 的非布尔值
应使用 === 运算符或 !== 来测试此函数的返回值
示例
<?php // 忽视位置偏移量之前的字符进行查找 $newstring = 'abcdef abcdef'; $pos = strpos($newstring, 'a', 1); // $pos = 7, 不是 0 ?>
<?php $mystring = 'abc'; $findme = 'a'; $pos = strpos($mystring, $findme); //$pos = 0 // 注意这里使用的是 ===。简单的 == 不能像我们期待的那样工作, // 因为 'a' 是第 0 位置上的(第一个)字符。 if ($pos === false) { echo "没有找到字符串 '$findme' "; } else { echo "字符串 '$findme' 在字符串 '$mystring' 中被发现" echo "在其中的位置是 $pos"; //$pos = 0 } ?>
<?php $haystack = 'My name is Jay, age 28'; $needle = 8; var_dump(strpos($haystack, $needle)); /* 结果是 false,因为这里的 $needl是数字8,不是字符8,PHP会转成相应的ASII 8的ASII是 ^H, 自然是找不到的 */ ?> <?php $haystack = 'My name is Jay, age 28'; $needle = 97; var_dump(strpos($haystack, $needle)); /* 结果是 4,因为97的ASII是 字母a, */ ?>
stripos
查找字符串首次出现的位置(不区分大小写)mixed stripos ( string $haystack , string $needle [, int $offset = 0 ] )
在 PHP7 源码中该函数实现在string.c文件的2008行附近
该函数与 strpos 唯一的区别就是不区分大小写。其他可参考strpos
<?php $haystack = 'My name is Jay, age 28'; $needle = 'A'; var_dump(stripos($haystack, $needle)); /* 结果是 4 */ ?>
strrpos
计算指定字符串在目标字符串中最后一次出现的位置mixed strrpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
在 PHP7 源码中该函数实现在string.c文件的2068行附近
参数说明
haystack在该字符串中进行查找。
needle
如果 needle 不是一个字符串,那么它将被转换为整型并被视为字符的顺序值。
offset
如果提供了此参数,搜索会从字符串该字符数的起始位置开始统计,可以是负数
返回值
成功:返回 needle 存在于 haystack 字符串起始的位置(独立于 offset)失败:如果没找到 needle,将返回 FALSE。
注意
字符串位置是从0开始,而不是从1开始的此函数可能返回布尔值 FALSE,但也可能返回等同于 FALSE 的非布尔值
应使用 === 运算符或 !== 来测试此函数的返回值
示例
<?php $foo = "012345678901234567890123456789"; //从尾部第 3 个位置开始查找, //结果: int(27) var_dump(strrpos($foo, '7', -3)); //从尾部第 4 个位置开始查找, //结果: int(17) var_dump(strrpos($foo, '7', -4)); //从第 20 个位置开始查找 //结果: int(27) var_dump(strrpos($foo, '7', 20)); //结果: bool(false) var_dump(strrpos($foo, '7', 28)); ?> 可能有同学对上面的 -3那个例子看不明白 为什么上面的 -3,查找到的'7',最后出现的位置仍然是27,而不是17 这个-3该怎么计算呢? 其实很简单,我们观察一下$foo, 长度为30,在C语言中用字符数组来存的话就是0到29 在PHP内部是使用$foo的长度30加上偏移-3等于27,然后在字符数组0到27中来查找。 0到27也就是字符串 0123456789012345678901234567,所以为'7'最后一次出现的位置是27
strripos
计算指定字符串在目标字符串中最后一次出现的位置(不区分大小写)mixed strripos ( string $haystack , mixed $needle [, int $offset = 0 ] )
在 PHP7 源码中该函数实现在string.c文件的2137行附近
该函数与 strrpos 唯一的区别就是不区分大小写。其他可参考strrpos
<?php $haystack = 'ababcd'; $needle = 'aB'; $pos = strripos($haystack, $needle); if ($pos === false) { echo "Sorry, we did not find ($needle) in ($haystack)"; } else { //结果找到了,位置为2 echo "Congratulations!\n"; echo "We found the last ($needle) in ($haystack) at position ($pos)"; } ?>
相关文章推荐
- 数据库链接字符串查询网站
- Flex字符串比较 还有Flex字符串操作
- Ruby中创建字符串的一些技巧小结
- ASP下经常用的字符串等函数参考资料
- 将字符串小写转大写并延时输出的批处理代码
- 将字符串转换成System.Drawing.Color类型的方法
- Lua源码中字符串类型的实现
- Lua性能优化技巧(四):关于字符串
- 字符串聚合函数(去除重复值)
- Ruby中的字符串编写示例
- 总结的5个C#字符串操作方法分享
- sqlserver中求字符串中汉字的个数的sql语句
- sql server字符串非空判断实现方法
- VBS的字符串及日期操作相关函数
- C#实现将千分位字符串转换成数字的方法
- jquery 删除字符串最后一个字符的方法解析
- PowerShell实现在字符串中查找大写字母
- PowerShell中使用Out-String命令把对象转换成字符串输出的例子
- PowerShell中字符串使用单引号和双引号的区别
- Powershell小技巧之获取字符串的行数