【问题标题】:How to use preg_replace to remove anything from a certain character on until the end of a string?如何使用 preg_replace 从某个字符中删除任何内容,直到字符串结尾?
【发布时间】:2011-06-01 11:31:35
【问题描述】:

嗨 我需要从 '_' 中删除所有字符,直到字符串结尾。

我试过了:

$string = 'merry_christmas';

$string = preg_replace('/_*/','',$string);

echo $string; // I need it to be: 'merry'

...但是没有。

这个想法是删除下划线字符'_' 及其右侧的所有字符。

谢谢

【问题讨论】:

    标签: php preg-replace


    【解决方案1】:

    你根本不需要正则表达式,你可以使用explodesubstr 可能更好,但我想展示另一种选择):

    $string = array_shift(explode('_', $string));
    

    您的表达式不起作用,因为它匹配可变数量的_,而不是其他字符。

    【讨论】:

      【解决方案2】:

      不要忘记strstr(),尤其是从 PHP 5.3.0 开始提供的 $before_needle 参数。

      $stub = strstr($string, '_', true) ?: $string;
      

      【讨论】:

        【解决方案3】:

        模式/_*/ 匹配零个或多个连续的_。所以它会将merry_christmas 变成merrychristmas

        您需要的是匹配_ 后跟零个或多个任意字符的/_.*/s(注意s modifier):

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

        但正如其他人已经提到的,使用正则表达式可能不是最好的方法。还要考虑使用基本字符串操作的其他提到的解决方案。并非所有这些都像使用上述正则表达式那样具有可读性(更重要的是:如果字符串中没有_,它们可能会返回意外结果)。但在某些情况下它们可能会更快。

        【讨论】:

          【解决方案4】:

          它是“以及下划线之后的所有内容”,所以使用

          $string = 'merry_christmas'; 
          $string = preg_replace('/_.*/','',$string); 
          echo $string;
          

          【讨论】:

            【解决方案5】:

            您的模式不正确,应将其设置为 '/_.*/' 所以:

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

            '.'表示任何字符,看看reg_ex教程

            【讨论】:

              【解决方案6】:

              下面会快很多;

              $str = 'merry_christmas';
              $str = substr($str, 0, strpos($str, '_'));
              

              【讨论】:

                【解决方案7】:
                preg_replace('/_(.*)/','',$string);
                

                【讨论】:

                • 与我的解决方案相同,但您不需要括号,因为它们会将“_”之后的内容保存在内存中,并且不需要
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-05-23
                • 1970-01-01
                • 2012-05-02
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多