PHP正则表达式,用于删除下划线之后的所有内容


PHP Regular Expression to remove everything after an underscore

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

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

我需要生成一个正则表达式来删除下划线和之后的任何字符,因此65_12345将成为65,有人可以建议一个简单的表达式来做到这一点吗?

为什么使用正则表达式?函数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
)

regex方式使用preg_replace

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

非regex方式使用explode

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

这可以做你想做的,但为什么是regex?

#_.*#

快速版本:

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

If:

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

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