Php 如何使用preg_replace删除某个字符中的任何内容,直到字符串结束?

Php 如何使用preg_replace删除某个字符中的任何内容,直到字符串结束?,php,preg-replace,Php,Preg Replace,嗨 我需要删除“\u1”中的所有字符,直到字符串结束 我试过: $string = 'merry_christmas'; $string = preg_replace('/_*/','',$string); echo $string; // I need it to be: 'merry' ……但是没有 这样做的目的是删除下划线字符“及其右侧的所有字符 谢谢以下内容会快得多 $str = 'merry_christmas'; $str = substr($str, 0, strpos($s

嗨 我需要删除“\u1”中的所有字符,直到字符串结束

我试过:

$string = 'merry_christmas';

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

echo $string; // I need it to be: 'merry'
……但是没有

这样做的目的是删除下划线字符
及其右侧的所有字符


谢谢

以下内容会快得多

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

您的模式不正确,应将其设置为“/。*/”,以便:

$string = preg_replace('/_.*/','',$string);
“.”表示任何字符,请查看reg_ex tutorial

它是“以及下划线后面的所有内容”,因此请使用


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


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

模式
/\u*/
匹配零个或多个连续的
\u
。因此,它将把圣诞快乐变成圣诞快乐

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

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

不要忘记,尤其是从PHP5.3.0开始提供的
$before\u needle
参数

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

与我的解决方案相同,但您不需要括号,因为它们会在内存中保留“_”后面的内容,而不需要它
$string = 'merry_christmas'; 
$string = preg_replace('/_.*/','',$string); 
echo $string;
$string = array_shift(explode('_', $string));
$string = preg_replace('/_.*/s', '', $string);
$stub = strstr($string, '_', true) ?: $string;