1

假设在 PHP 中我有一个字符串变量: "This takes between 5 and 7 days"

我需要以整数形式存储一些有关所需时间的合理信息。

如果结果是 5,我很满意。

我尝试剥离非数字字符,但最终得到 57 个。

如何以更好的方式做到这一点?

4

4 回答 4

4

使用preg_match正则表达式匹配第一个数字组:

$subject = 'This takes between 5 and 7 days';
if (preg_match('/\d+/', $subject, $matches)) {
    echo 'First number is: ' . $matches[0];
} else {
    echo 'No number found';
}

使用preg_match_all您可以匹配所有数字组(57此示例中):

$subject = 'This takes between 5 and 7 days';
if (preg_match_all('/\d+/', $subject, $matches)) {
    echo 'Matches found:<br />';
    print_r($matches);
} else {
    echo 'No number found';
}
于 2012-06-17T22:56:03.033 回答
1

如果您想提取价格,即 7.50 欧元或 50 美元等,这是正则表达式为我提供的解决方案。

 preg_match('/\d+\.?\d*/',$price_str,$matches); 
 echo $matches[0]; 

结果 7.50 或 50

于 2013-07-03T07:09:38.660 回答
1

如果您想适当地量化数字,我会建议以下内容:

<?php
$subject = "This takes between 5 and 7 days";

$dayspattern = '/\d+(\.\d+)? ?days?/';
$hourspattern = '/\d+(\.\d+)? ?hours?/'

$hours = -1;

if (preg_match($dayspattern , $subject, $matches) > 0)
{
  preg_match($dayspattern, $matches[0], $days);
  $hours = $days * 24;
} elseif (preg_match($dayspattern , $subject, $matches) > 0) {
  preg_match($hourspattern, $matches[0], $hours);
  $hours = $hours;
}

?>

您需要考虑:

  • 当没有找到数字或数字以文本形式给出时会发生什么。
  • 当有人说“1天5小时”时会发生什么

希望这可以为您提供足够的信息,让您自己完成剩下的工作。

于 2012-06-17T22:57:24.967 回答
-1

通过将字符串拆分为数组,将主题拆分为单词。然后,不知何故,我不知道,从数组中取出单词。也许通过循环遍历 try-catch 块内数组的所有子元素,并尝试将每个元素更改为一种int类型:

for($i=0;$i<$words->length;$i++){
    try{
        $tempNum = (int)$words[$i];
    }catch($ex){
        $words->remove($i);
    }
}

或类似的东西。我不知道任何数组方法,但你明白我的意思。无论如何,$words数组现在只包含数字。

于 2012-06-17T23:08:00.163 回答