假设在 PHP 中我有一个字符串变量: "This takes between 5 and 7 days"
我需要以整数形式存储一些有关所需时间的合理信息。
如果结果是 5,我很满意。
我尝试剥离非数字字符,但最终得到 57 个。
如何以更好的方式做到这一点?
假设在 PHP 中我有一个字符串变量: "This takes between 5 and 7 days"
我需要以整数形式存储一些有关所需时间的合理信息。
如果结果是 5,我很满意。
我尝试剥离非数字字符,但最终得到 57 个。
如何以更好的方式做到这一点?
使用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
您可以匹配所有数字组(5
在7
此示例中):
$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';
}
如果您想提取价格,即 7.50 欧元或 50 美元等,这是正则表达式为我提供的解决方案。
preg_match('/\d+\.?\d*/',$price_str,$matches);
echo $matches[0];
结果 7.50 或 50
如果您想适当地量化数字,我会建议以下内容:
<?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;
}
?>
您需要考虑:
希望这可以为您提供足够的信息,让您自己完成剩下的工作。
通过将字符串拆分为数组,将主题拆分为单词。然后,不知何故,我不知道,从数组中取出单词。也许通过循环遍历 try-catch 块内数组的所有子元素,并尝试将每个元素更改为一种int
类型:
for($i=0;$i<$words->length;$i++){
try{
$tempNum = (int)$words[$i];
}catch($ex){
$words->remove($i);
}
}
或类似的东西。我不知道任何数组方法,但你明白我的意思。无论如何,$words
数组现在只包含数字。