帮助解析格式化的字符串

Fre*_*die 1 php regex string-parsing

我有字符串:

17s 283ms
48s 968ms
Run Code Online (Sandbox Code Playgroud)

字符串值永远不会相同,我想从中提取"第二"值.在这种情况下,17和48.

我对正则表达式不太了解,所以我做的解决方法是:

$str = "17s 283ms";    
$split_str = explode(' ', $str);

foreach($split_str as $val){
    if(strpos($val, 's') !== false) $sec = intval($val);
}
Run Code Online (Sandbox Code Playgroud)

问题是,字符''存在于split_str [0]和split_str [1]中,因此我的$ sec变量保持获得283而不是17.

再一次,我对正则表达式不是很了解,我非常确定正则表达式是这种情况下的方法.请协助.谢谢.

Jon*_*Jon 6

你甚至不需要使用正则表达式.

$seconds = substr($str, 0, strspn($str, '1234567890'));
Run Code Online (Sandbox Code Playgroud)

上述解决方案将从字符串的开头提取所有数字.如果第一个非数字字符是"s",空格或其他任何内容,则无关紧要.

但为什么要这么麻烦?

你甚至可以投射$str到int:

$seconds = (int)$str; // equivalent: intval($str)
Run Code Online (Sandbox Code Playgroud)

看到它在行动.

对于这样一个简单的任务,正则表达式肯定是过度的.不要用炸药在墙上钻孔.