php 字符串处理问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 字符串处理问题相关的知识,希望对你有一定的参考价值。

原字符
例子1:第一$opda1254#第二$oplajmw1235$$$第三$oplajmw85415#第四$oplajmw1666
例子2:第一$opda1254#第二$oplajmw1235
例子3:oplajmw1235
有以上三个类型字符串,需要提取出每个字符串$后面的opda1254进行二次处理,比如前后加个11,如果前面没有$,如最后一个 就直接前后加11

需要的字符
例子1:第一$11opda125411#第二$11oplajmw123511$$$第三$11oplajmw8541511#第四$11oplajmw166611
例子2:第一$11opda125411#第二$11oplajmw123511
例子3:11oplajmw123511

我的想法是先判断是否有$$$,有分割,然后在判断#,分割,在判断$,分割,然后取后面的值进行操作,但是技术不行。。。特来求救。

知道的朋友麻烦给个例子谢谢。
第一$opda1254#第二$oplajmw1235$$$第三$oplajmw85415#第四$oplajmw1666
$后面的字符可能是网址,也可能是某些字母+数字,也可能带一些特殊字符比如第四$oplajmw1666_op
比如例子1:第一$http://baidu.com/1/ad9.html#第二$oplajmw1235_cc$$$第三$oplajmw854_15#第四$oplajmw1666
我要匹配出$后面的字符 比如 http://baidu.com/1/ad9.html oplajmw1235_cc oplajmw854_15 oplajmw1666
然后对这个字符串进行加密,得出结果为
第一$wqdoasd#第二$jwodjqww$$$第三$awdiuhioa#第四$klnadw
现在加密是现成的,封装成函数,传递字符串返回加密结果字符串,但是问题是我不知道该怎么分割后处理每个字符串。
我的想法是先判断是否存在$$$,存在分割,然后在判断分割好的每个字符里是否包含#,包含在分割。然后判断是否包含$,不存在直接加密,存在分割取后面的字符,然后一一处理完成后得出上面的加密结果

如果没理解错,方法如下:
首先有个函数explode(),当然你也可以自己写拆分函数
第一步,找$来拆分,如果子串等于1,那么两边直接加11,返回结果。如果子串大于1,那么进行第二步
第二步,重新处理这个字符串,这次找$opda1254来拆分,如果子串等于1,那么直接返回不处理,如果子串大于1,比如是2,那么原字符串大概是***+$opda1254+***,那么拼接时使用$11opda125411连接2个子串即可。

如果子串是多个,同第二步,只不过是原串***+$opda1254+***+$opda1254+***追问

比如例子1:第一$opda1254#第二$oplajmw1235$$$第三$oplajmw85415#第四$oplajmw1666
要匹配出$后面的字符 比如 opda1254 oplajmw1235 oplajmw85415 oplajmw1666
然后对这个字符串进行加密,得出结果为
第一$wqdoasd#第二$jwodjqww$$$第三$awdiuhioa#第四$klnadw

追答

直接按$和#拆分就行了,$$$按照$拆分返回空字符串,只要返回结果不为空就可以加密了

直接按$和#拆分就行了,$$$按照$拆分返回空字符串,只要返回结果不为空就可以加密了

问题解决了吗

追问

额 兄弟 能给个例子吗 ? 就是这里多个加密不会,我搞来搞去只能弄到一个。。
加密就写个自定义函数,比如str,传递匹配的字符,返回加密后的字符。
多谢!!!

参考技术A preg_match_all
正则匹配用([\w]+),自动把你要的字符,分成数组。要哪个,就用哪个。很方便。追问

随机数据,比如是
第一$opda1254#第二$oplajmw1235$$$第三$oplajmw85415#第四$oplajmw1666

需要对字符串处理后在还原成字符串,不改变位置

追答

我不知道你随机出来什么。如果是一次一次随机的话。你可以把$和#去掉,不就是你要的字符串了嘛。
如果不是这样的话,你最好截个图上来看。

追问

这么说吧 字符串不是固定的

有可能是 第一$opda1254#第二$oplajmw1235$$$第三$oplajmw85415#第四$oplajmw1666
也有可能是 第一$opda1254#第二$oplajmw1235

也有可能是 oplajmw1235
但是只有这三种类型
需要提取出每个字符串$后面的字符进行二次处理,比如前后加个11,如果前面没有$,如最后一个 就直接前后加11

追答

就是我说的,用正则,可以匹配。只匹配字母数组即可!!!
单次匹配你看preg_match
多次匹配你看preg_match_all

追问

比如例子1:第一$opda1254#第二$oplajmw1235$$$第三$oplajmw85415#第四$oplajmw1666
我要匹配出$后面的字符 比如 opda1254 oplajmw1235 oplajmw85415 oplajmw1666
然后对这个字符串进行加密,得出结果为
第一$wqdoasd#第二$jwodjqww$$$第三$awdiuhioa#第四$klnadw

追答

你贴源码出来吧。你这样举例,我没看出你想要得到什么。

PHP 用字符串返回 false

【中文标题】PHP 用字符串返回 false【英文标题】:PHP return false with a string 【发布时间】:2011-12-04 05:58:44 【问题描述】:

我正在寻找使用布尔/字符串处理返回语句的正确方法。例如,我在函数内部进行了所有检查,如果全部通过,则返回 true。但是,如果出现问题,我想返回一个错误字符串,而不仅仅是返回 false;带有一般字符串。如果 var 设置为 true 以外的任何值,php 是否会假定为 false?处理这个问题的正确方法是什么?这是我正在做的一个例子

<?php
$a = 2;

$result = CheckVar($a);
if ($result)

    echo 'Correct!';

else

    echo $result;


function CheckVar($var)

    if ($var == 1)
    
        return true;
    
    else
    
        return 'This is not the correct answer. You supplied '.$var;
    

?>

看来这个方法行得通,但是这是好的编程礼仪吗?还是我应该这样做的另一种方式?感谢您的宝贵时间。

【问题讨论】:

您需要了解 PHP(也适用于 JavaScript)中的 falsy 值。 ***.com/questions/699507/… @zzzzBov 异常是昂贵的。除非您有充分的理由,否则不要抛出异常。 @NullUserExceptionఠ_ఠ,不要过早优化。是的,使用许多例外可能代价高昂。 @zzzzBov 使用异常也会丑化你的代码。如果“答案不正确”,IMO 抛出异常是 no 有意义的。异常应该用于处理不符合预期的代码 - 因此名称为“异常”。你完全认为答案是错误的。 我会知道的。毕竟,我 Exception :) 【参考方案1】:

如果 var 设置为除 true 以外的任何值,php 是否会假定为 false?

一点也不。 PHP 将返回变量设置的任何值。实际上,因为您有一个非空字符串,所以这是一个“真实”值(即:true 在布尔上下文中)。由于您使用if ($result) 作为检查并返回“真实”值,因此条件始终为真。您需要将该检查更改为:

if ($result === true) 
    ...

处理这个问题的正确方法是什么?

我认为这是处理它的好方法。另一种方法是通过引用传递一个错误字符串变量,并让代码的失败部分填充它,例如:

function check($var, &$error) 
    if ($var == 1) 
        return true;
     else 
        $error = 'This is not the correct answer. You supplied ' . $var;
        return false;
    

一些原生 PHP 函数的行为是这样的(例如:exec()。)另一种选择是返回一个包含错误的数组,就像 Jared 建议的那样。当我预计会出现多个错误(例如:表单验证例程)时,我个人会使用此选项:

function check_stuff($stuff) 
    $errors = array();
    if (!$condition1) 
        $errors[] = 'Condition 1 failed';
    

    if (!$condition2) 
        $errors[] = 'Condition 2 failed';
    

    return $errors;

现在您还可以利用空数组是虚假的这一事实:

$errors = check_stuff($your_stuff);
if (!$errors) 
    echo 'No errors!';
 else 
    print_r($errors);

【讨论】:

虽然我在过去一年中以不同的方式处理了这个问题,但在这种情况下,我可能想从函数返回一个错误数组,然后测试返回结果中它有多少个数组成员。这样,我不必维护两个不同的上下文(参数和返回值)。 @Jared 当我预计会出现多个错误(例如:表单验证器)时,我也会使用数组。【参考方案2】:

您可以使用=== 来检查返回值是否为布尔值true。 === 检查类型和值。

if ($result === true)

    echo 'Correct!';

else

    echo $result;

【讨论】:

这很好用,尽管通过引用传递变量似乎是更好的实践标准。感谢您的帮助。【参考方案3】:

我最近遇到了这个问题,我的函数要么将错误消息作为字符串返回,要么像这样返回 true:

function check_something()
    if(condition)
        return 'error message';
    
    // if we got this far all is good!
    return true;

我会这样调用它并检查结果:

$var = check_something();

if($var !== true)
    // $var is not boolean true, so it must be a string
    echo $var;

这会检查函数的结果是否不仅仅是一个真字符串,而是一个明确的布尔真

【讨论】:

【参考方案4】:

这对于返回 true 或返回 false 作为字符串的人可能很有用。

if (is_bool($result)) 

   echo 'Result is a true bool';
 
else

   echo $result.'returning a string';

【讨论】:

以上是关于php 字符串处理问题的主要内容,如果未能解决你的问题,请参考以下文章

php字符串处理之全角半角转换

PHP中字符串的处理

PHP开发-多字节字符串处理及字符编码

PHP开发-多字节字符串处理及字符编码

PHP基础知识

PHP系列PHP字符串处理