【问题标题】:PHP Regular Expression to remove everything after an underscorePHP正则表达式删除下划线后的所有内容
【发布时间】:2014-05-03 06:56:50
【问题描述】:

我有一个数组,其中包含许多两种格式的字符串,它们是..

'number' e.g 55
'number_number' eg 65_12345

我需要生成一个正则表达式来删除下划线和之后的任何字符,所以65_12345 将变为65,有人可以建议一个简单的表达式来执行此操作吗?

【问题讨论】:

    标签: php regex arrays function


    【解决方案1】:

    为什么要使用正则表达式?函数strstr 可以轻松做到这一点:

    $num = '65_12345';
    echo strstr($num, '_', true); // 65
    

    用于替换具有相同格式的数字数组:

    $numArr = ['65_12345','223_43434','5334_23332'];
    
    array_walk($numArr, function(&$v) {
        $v = strstr($v, '_', true);
    });
    
    print_r($numArr);
    

    输出:

    Array
    (
        [0] => 65
        [1] => 223
        [2] => 5334
    )
    

    【讨论】:

    • 好点..我的脑子只是出于某种原因考虑正则表达式
    • @Zabs,是的,这样的小操作最好避免使用正则表达式:)
    • 感谢大家的一些很好的回答 :) 我使用了您的回答略有不同,因此接受了您的回答。
    【解决方案2】:

    将 preg_replace 用于 regex 方式

    echo  preg_replace('~(\d+)_\d+~',"$1",'65_12345');
    

    将explode 用于非正则表达式方式

    echo explode('_','65_12345')[0];
    

    【讨论】:

      【解决方案3】:

      这可以做你想做的,但为什么是正则表达式?

      #_.*#
      

      快速版本:

      substr('65_678789', 0, strpos('65_678789', '_'));
      

      【讨论】:

        【解决方案4】:

        如果是正则表达式:

        $string = preg_replace("/_.*/", "", $string);
        

        _.* 表示下划线后面带下划线的任何内容。

        【讨论】:

          猜你喜欢
          • 2011-05-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-26
          • 2017-08-29
          相关资源
          最近更新 更多