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

wal*_*ter 8 php preg-replace

嗨我需要删除'_'中的所有字符,直到字符串结束.

我尝试过:

$string = 'merry_christmas';

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

echo $string; // I need it to be: 'merry'
Run Code Online (Sandbox Code Playgroud)

......但是不.

这个想法是删除下划线字符'_'和右边的所有字符.

谢谢

Eri*_*rik 11

以下会更快;

$str = 'merry_christmas';
$str = substr($str, 0, strpos($str, '_'));
Run Code Online (Sandbox Code Playgroud)


Gum*_*mbo 7

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

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

$string = preg_replace('/_.*/s', '', $string);
Run Code Online (Sandbox Code Playgroud)

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


Poe*_*rin 0

preg_replace('/_(.*)/','',$string);
Run Code Online (Sandbox Code Playgroud)