有人可以提供一种方法来解析具有如下格式的字段,并在冒号之间取两个值之间的区别。
bot1:11874-12227:top
例如,结果字段将等于12227-11874 = 353.
我认为类似于分隔符扫描,然后评估差异的负面影响。
答案 0 :(得分:1)
$string = "bot1:11874-12227:top";
$parts = explode(":", $string);
$numbers = explode("-", $parts[1]);
$difference = (($numbers[1] - $numbers[0]) > 0) ? $numbers[1] - $numbers[0] : $numbers[0] - $numbers[1];
echo $difference;
答案 1 :(得分:0)
只需使用preg_match
的正则表达式:
$string = 'bot1:11874-12227:top';
preg_match("#[A-Za-z]+[0-9]?:([0-9]+)([-|+|*|//])([0-9]+):[A-Za-z]+#", $string, $matches);
echo '<pre>';
print_r($matches);
echo '</pre>';
结果将是:
Array
(
[0] => bot1:11874-12227:top
[1] => 11874
[2] => -
[3] => 12227
)
然后只需执行以下操作即可:
echo abs($matches[1] - $matches[3]);
现在,请注意$matches[2]
如何匹配数学运算符?好吧,为什么不利用create_function
来执行以下操作:
$string_to_math_results = create_function("", "return ($matches[1] $matches[2] $matches[3]);" );
echo abs($string_to_math_results());
所以像这样把它们一起带来。现在,您不仅可以解析字符串中的值,还可以根据字符串中的值执行基本计算:
$string = 'bot1:11874-12227:top';
preg_match("#[A-Za-z]+[0-9]?:([0-9]+)([-|+|*|//])([0-9]+):[A-Za-z]+#", $string, $matches);
$string_to_math_results = create_function("", "return ($matches[1] - $matches[3]);" );
echo abs($string_to_math_results());