我到处都看过,但是似乎不能只返回第一个正实数。到目前为止,我已经成功地找到了如何找到第一个正数或负数,并且也只找到了第一个负数。以下是我正确执行的两个操作,以及我无法正确执行的操作。
$str1 = "-ABS-.-179.3333es-k15dk825.44f";
1)查找字符串中的第一个实数:
preg_match("/-?((\.\d+)|(\d+(\.\d+)?))/", $str1, $matches) // <- GOOD!
Expected output: -179.3333
Actual output: -179.3333
2)在字符串中查找第一个负实数:
preg_match("/-((\.\d+)|(\d+(\.\d+)?))/", $str1, $matches) // <- GOOD!
Expected output: -179.3333
Actual output: -179.3333
3)在字符串中找到第一个正实数:
preg_match("/(?<!-)((\.\d+)|(\d+(\.\d+)?))/", $str1, $matches) //<- WRONG!
Expected output: 15
Actual output: 79.3333
任何帮助将不胜感激!
答案 0 :(得分:2)
我认为您正在寻找:
preg_match('/(?<!-|\d|\.)\d+/', $str1, $matches);
更新
有关:
preg_match('/(?<!-|\d|\.)\d+(\.\d+)?/', $str1, $regs);
答案 1 :(得分:1)
尝试以下操作,看看它是否满足您的要求。
preg_match_all('/[^\-\d\.]((?:\d+)(?:(?:\.\d+)|(?:\d+)))/', $str1, $matches);
var_dump($matches[1]);