我在 PHP 上的 strpos & substr 函数有问题

如何解决我在 PHP 上的 strpos & substr 函数有问题

strpos & substr 函数有问题,谢谢大家的帮助:

$temp = "U:hhp|E:123@gmail.com,P:h123";

$find_or = strpos($temp,"|");
$find_and = strpos($temp,",");

$find_user = substr($temp,2,$find_or-2);
$find_email = substr($temp,$find_or+3,$find_and);
$find_passeord = substr($temp,$find_and+3,strlen($temp));

echo("$find_user+$find_email+$find_passeord<br/>");

/****************************************/

为什么输出是这样的??

hhp+123@gmail.com,P:h123 +h123

但我想要这个:

hhp+123@gmail.com,h123

解决方法

问题是 $find_and, 的索引,但是 substr() 的第三个参数需要是子串的长度,而不是结束索引。所以

$find_email = substr($temp,$find_or+3,$find_and);

应该

$find_email = substr($temp,$find_and-$find_or-3);

对于 $find_passeord,您可以省略第三个参数,因为默认值是字符串的结尾。

但是,使用正则表达式会更简单:

if (preg_match('/^U:(.*?)\|E:(.*?),P:(.*)/',$temp,$match)) {
    list($whole,$user,$email,$password) = $match;
}
,

如果您可以控制输入,我建议

$temp = "U:hhp|E:123@gmail.com|P:h123";
list($user,$password) = explode("|",$temp);
$user = explode(":",$user)[1];
$email = explode(":",$email)[1];
$password = explode(":",$password)[1];

如果不是,那么我仍然建议将字符串分解成多个部分,然后按照您的需要进行操作。 https://3v4l.org/ 是一个很好的测试 php 代码的网站……这里有一个例子 https://3v4l.org/upEGG

,

与 Barmar 刚刚在评论中所说的相呼应,正则表达式绝对是“拆分字符串”的最佳方式。 (这实际上是它们的用途。) 这是 PHP 函数的 preg_ 系列。 (例如 preg_matchpreg_match_allpreg_replace。)

“正则表达式”背后的价值百万美元的想法是它是一个字符串匹配的模式。如果字符串“匹配”该模式,您可以轻松地提取与 匹配的确切子字符串em>部分

简而言之,所有您现在正在处理的strpos/substr逻辑...... “消失了!” 噗。

例如,这个模式:^(.*)|(.*),(.*)$ ...

它说:“锚定在字符串 ^ 的开头,捕获 () 一个由“零次或多次出现的任何字符 (.*) 组成的模式,直到遇到文字 { {1}}。现在,对于第二组,继续直到找到 |。然后,对于第三组,继续取任何字符直到字符串 , 的结尾。"

您可以“匹配”该正则表达式,然后只需处理所有这三个组! (以及“匹配的总字符串。”)而且您不必“编写”任何东西!

现在有 数千 个网页在一个神秘的字符串中讨论这种“非凡的‘编程语言’”。但对于任何从业者来说,它可能是最实用的技术,并且每种编程语言都以某种方式实现了它,或多或少遵循了由(仍然活跃的)编程语言,$

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res