【发布时间】:2014-05-03 06:56:50
【问题描述】:
我有一个数组,其中包含许多两种格式的字符串,它们是..
'number' e.g 55
'number_number' eg 65_12345
我需要生成一个正则表达式来删除下划线和之后的任何字符,所以65_12345 将变为65,有人可以建议一个简单的表达式来执行此操作吗?
【问题讨论】:
我有一个数组,其中包含许多两种格式的字符串,它们是..
'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
)
【讨论】:
将 preg_replace 用于 regex 方式
echo preg_replace('~(\d+)_\d+~',"$1",'65_12345');
将explode 用于非正则表达式方式
echo explode('_','65_12345')[0];
【讨论】:
这可以做你想做的,但为什么是正则表达式?
#_.*#
快速版本:
substr('65_678789', 0, strpos('65_678789', '_'));
【讨论】:
如果是正则表达式:
$string = preg_replace("/_.*/", "", $string);
_.* 表示下划线后面带下划线的任何内容。
【讨论】: