如何使用preg_replace从某个字符中移除任何内容直到字符串结尾?

时间:2010-12-30 09:29:55

标签: php preg-replace

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

我尝试过:

$string = 'merry_christmas';

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

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

......但是没有。

我们的想法是删除下划线字符'_'以及右侧的所有字符。

由于

7 个答案:

答案 0 :(得分:11)

以下会更快;

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

答案 1 :(得分:6)

模式/_*/匹配零个或多个连续_。因此,它会将merry_christmas变为merrychristmas

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

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

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

答案 2 :(得分:3)

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

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

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

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

'。'意味着任何角色,看看reg_ex教程