php的内置函数strrpos_php strrpos 字符串查找函数内部源码实现
此函数strrpos从字符串的末尾开始查找所需要查找的字符。其他内部实现和strpos差不多是一样的。
/* {{{ proto int strrpos(string haystack, string needle [, int offset]) Finds position of last occurrence of a string within another string */
PHP_FUNCTION(strrpos)
{
zval *zneedle;
char *needle, *haystack;
int needle_len, haystack_len;
long offset = 0;
char *p, *e, ord_needle[2];
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz|l", &haystack, &haystack_len, &zneedle, &offset) == FAILURE) {
RETURN_FALSE;
}
if (Z_TYPE_P(zneedle) == IS_STRING) {
needle = Z_STRVAL_P(zneedle);
needle_len = Z_STRLEN_P(zneedle);
} else {
if (php_needle_char(zneedle, ord_needle TSRMLS_CC) != SUCCESS) {
RETURN_FALSE;
}
ord_needle[1] = '\0';
needle = ord_needle;
needle_len = 1;
}
if ((haystack_len == 0) || (needle_len == 0)) {
RETURN_FALSE;
}
if (offset >= 0) {
if (offset > haystack_len) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset is greater than the length of haystack string");
RETURN_FALSE;
}
p = haystack + offset;
e = haystack + haystack_len - needle_len;
} else {
if (offset < -INT_MAX || -offset > haystack_len) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset is greater than the length of haystack string");
RETURN_FALSE;
}
p = haystack;
if (needle_len > -offset) {
e = haystack + haystack_len - needle_len;
} else {
e = haystack + haystack_len + offset;
}
}
if (needle_len == 1) {
/* Single character search can shortcut memcmps */
while (e >= p) {
if (*e == *needle) {
RETURN_LONG(e - p + (offset > 0 ? offset : 0));
}
e--;
}
RETURN_FALSE;
}
while (e >= p) {
if (memcmp(e, needle, needle_len) == 0) {
RETURN_LONG(e - p + (offset > 0 ? offset : 0));
}
e--;
}
RETURN_FALSE;
}
php的内置函数strrpos_php strrpos 字符串查找函数内部源码实现相关推荐
- 字符串查找函数 php,php字符串查找函数(strrpos与strchr)
本节内容: php中的字符串函数strrpos与strchr,实现字符串查找方法. strchr(等同于strstr): 语法: string strstr(string haystack,strin ...
- strchr函数-----c语言字符串查找函数
strchr函数 返回第一次出现字符c的地址,要用指针去接收 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<s ...
- 直接调用内置数据源连接对话框(C#/VB.NET2005源码)
'先引用Microsoft.Data.ConnectionUI.Dialog.dll(在VS2005安装路径的IDE目录下) '将以下代码加入相应事件过程 Dim ...
- 一木.溪桥学Python-09:函数的返回值、函数的作用域、作用域的优先级、递归函数、内置文件中常用方法、匿名函数lambda、高阶函数
一木.溪桥 在Logic Education跟Amy学Python 12期:Python基础课 一木.溪桥学Python-09:函数的返回值.作用域.作用域的优先级.递归函数.内置文件中常用方法.匿名 ...
- pb函数库之字符串操作函数
pb函数库之字符串操作函数 Fill()功能建立一个由指定字符串填充的指定长度的字符串. 语法Fill ( chars, n ) 参数chars:string类型,指定用于重复填充的字符串n: ...
- C语言用函数字符串的查找,字符串查找函数,C语言字符串查找函数详解
在对 C 语言的编程实践中,字符串查找是最频繁的字符串操作之一,本节就对常用的字符串查找函数做一个简单的总结. 使用 strchr 与 strrchr 函数查找单个字符如果需要对字符串中的单个字符进行 ...
- 输入一个字符串,用子函数完成在字符串中找出ACSII码值最大的字符,将其放在第一个位置,并将该字符前的所有字符向后顺序移动
<程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p143 7.1.2 上级实训内容 [实训内容9]输入一个字符串,用子函数完成在字符串中找出ACSII码 ...
- python字符串find函数-python字符串查找函数的用法详解
python字符串查找函数的使用 打开Python开发工具IDLE,新建"findstr.py'文件,并写代码如下: s ='/ab/bx,.s' print (s.find('/x')) ...
- 字符串查找函数和错误信息报告函数
前言: 本博客介绍了字符串查找函数(strstr.strtok)和错误信息报告函数(strerror) 字符串查找函数(strstr.strtok)的介绍及其应用: strstr函数的介绍及其模拟实现 ...
最新文章
- 【转】Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask
- hash redis springboot_Redis常见的工作场景使用实战,Redisson分布式锁的实现
- sdut 区间覆盖问题
- Navicat Report Viewer 如何连接到 MySQL 数据库
- 打开AD16的库librarry
- C# 串口驱动封装成类库
- 如何将pdf文件转换成图片格式,插入到word中
- 老王论坛蓝色大屏幕调节亮度
- 不会做动画的程序猿不是好的动画师(如何用css3动画做动画)
- SLAM优秀开源工程大汇总
- 只要1美元!教你给MacBook装上触摸屏
- 我协会负责人调研东风汽车·····
- BRENDAN MCCAFFREY:自行车大师
- 运算放大器中的正负反馈判断和电压电流反馈判断
- python字典zip函数_Python zip函数及用法
- 在电脑上下载360手机助手中的APK文件
- Word引用参考文献批量设置为上标
- PostGIS空间拓扑关系空间分析教程
- javascript程序_使用JavaScript构建实时应用程序的5种方法
- FusionCharts_API_中文帮助文档!
热门文章
- 【渝粤教育】国家开放大学2018年秋季 0508-21T影视特技及后期合成 参考试题
- 无线传感器在智能家居中的应用
- E95-DTU(4G01-485)数传电台的特点及其应用详解
- 安卓跑linux程序_Android下运行Linux可执行程序
- Matlab调制库函数fskmod参数及源代码详解
- 我们知道计算机的大小单位有 B, KB, MB 等,现在请你编写一个计算器进行大小单位换算。Java洛谷传智杯
- Java泛型(1)--集合使用泛型Generic、自定义泛型、泛型在继承上的体现、通配符的使用
- 计算机图形学结课论文,计算机图形学结课论文精要.doc
- php 之 ajax,PHP之AJAX
- python123第七章_Python入门第7/10页