此函数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 字符串查找函数内部源码实现相关推荐

  1. 字符串查找函数 php,php字符串查找函数(strrpos与strchr)

    本节内容: php中的字符串函数strrpos与strchr,实现字符串查找方法. strchr(等同于strstr): 语法: string strstr(string haystack,strin ...

  2. strchr函数-----c语言字符串查找函数

    strchr函数 返回第一次出现字符c的地址,要用指针去接收 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<s ...

  3. 直接调用内置数据源连接对话框(C#/VB.NET2005源码)

    '先引用Microsoft.Data.ConnectionUI.Dialog.dll(在VS2005安装路径的IDE目录下) '将以下代码加入相应事件过程                    Dim ...

  4. 一木.溪桥学Python-09:函数的返回值、函数的作用域、作用域的优先级、递归函数、内置文件中常用方法、匿名函数lambda、高阶函数

    一木.溪桥 在Logic Education跟Amy学Python 12期:Python基础课 一木.溪桥学Python-09:函数的返回值.作用域.作用域的优先级.递归函数.内置文件中常用方法.匿名 ...

  5. pb函数库之字符串操作函数

    pb函数库之字符串操作函数     Fill()功能建立一个由指定字符串填充的指定长度的字符串. 语法Fill ( chars, n ) 参数chars:string类型,指定用于重复填充的字符串n: ...

  6. C语言用函数字符串的查找,字符串查找函数,C语言字符串查找函数详解

    在对 C 语言的编程实践中,字符串查找是最频繁的字符串操作之一,本节就对常用的字符串查找函数做一个简单的总结. 使用 strchr 与 strrchr 函数查找单个字符如果需要对字符串中的单个字符进行 ...

  7. 输入一个字符串,用子函数完成在字符串中找出ACSII码值最大的字符,将其放在第一个位置,并将该字符前的所有字符向后顺序移动

    <程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p143 7.1.2 上级实训内容 [实训内容9]输入一个字符串,用子函数完成在字符串中找出ACSII码 ...

  8. python字符串find函数-python字符串查找函数的用法详解

    python字符串查找函数的使用 打开Python开发工具IDLE,新建"findstr.py'文件,并写代码如下: s ='/ab/bx,.s' print (s.find('/x')) ...

  9. 字符串查找函数和错误信息报告函数

    前言: 本博客介绍了字符串查找函数(strstr.strtok)和错误信息报告函数(strerror) 字符串查找函数(strstr.strtok)的介绍及其应用: strstr函数的介绍及其模拟实现 ...

最新文章

  1. 【转】Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask
  2. hash redis springboot_Redis常见的工作场景使用实战,Redisson分布式锁的实现
  3. sdut 区间覆盖问题
  4. Navicat Report Viewer 如何连接到 MySQL 数据库
  5. 打开AD16的库librarry
  6. C# 串口驱动封装成类库
  7. 如何将pdf文件转换成图片格式,插入到word中
  8. 老王论坛蓝色大屏幕调节亮度
  9. 不会做动画的程序猿不是好的动画师(如何用css3动画做动画)
  10. SLAM优秀开源工程大汇总
  11. 只要1美元!教你给MacBook装上触摸屏
  12. 我协会负责人调研东风汽车·····
  13. BRENDAN MCCAFFREY:自行车大师
  14. 运算放大器中的正负反馈判断和电压电流反馈判断
  15. python字典zip函数_Python zip函数及用法
  16. 在电脑上下载360手机助手中的APK文件
  17. Word引用参考文献批量设置为上标
  18. PostGIS空间拓扑关系空间分析教程
  19. javascript程序_使用JavaScript构建实时应用程序的5种方法
  20. FusionCharts_API_中文帮助文档!

热门文章

  1. 【渝粤教育】国家开放大学2018年秋季 0508-21T影视特技及后期合成 参考试题
  2. 无线传感器在智能家居中的应用
  3. E95-DTU(4G01-485)数传电台的特点及其应用详解
  4. 安卓跑linux程序_Android下运行Linux可执行程序
  5. Matlab调制库函数fskmod参数及源代码详解
  6. 我们知道计算机的大小单位有 B, KB, MB 等,现在请你编写一个计算器进行大小单位换算。Java洛谷传智杯
  7. Java泛型(1)--集合使用泛型Generic、自定义泛型、泛型在继承上的体现、通配符的使用
  8. 计算机图形学结课论文,计算机图形学结课论文精要.doc
  9. php 之 ajax,PHP之AJAX
  10. python123第七章_Python入门第7/10页