如何解决我在 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_match
、preg_match_all
、preg_replace
。)
“正则表达式”背后的价值百万美元的想法是它是一个字符串匹配的模式。如果字符串“匹配”该模式,您可以轻松地提取与 匹配的确切子字符串em>部分。
简而言之,所有您现在正在处理的strpos/substr
逻辑...... “消失了!” 噗。
例如,这个模式:^(.*)|(.*),(.*)$
...
它说:“锚定在字符串 ^
的开头,捕获 ()
一个由“零次或多次出现的任何字符 (.*)
组成的模式,直到遇到文字 { {1}}。现在,对于第二组,继续直到找到 |
。然后,对于第三组,继续取任何字符直到字符串 ,
的结尾。"
您可以“匹配”该正则表达式,然后只需处理所有这三个组! (以及“匹配的总字符串。”)而且您不必“编写”任何东西!
现在有 数千 个网页在一个神秘的字符串中讨论这种“非凡的‘编程语言’”。但对于任何从业者来说,它可能是最实用的技术,并且每种编程语言都以某种方式实现了它,或多或少遵循了由(仍然活跃的)编程语言,$
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。