PHP正则表达式忽略字符串中的负数

PHP正则表达式忽略字符串中的负数,php,expression,ignore,Php,Expression,Ignore,我找遍了所有的地方,但我似乎不能只返回第一个正的,真实的数字。到目前为止,我已经成功地找到了如何找到第一个正数或负数,并且只找到了第一个负数。下面是两个我做对了的和一个我拿不到的 $str1 = "-ABS-.-179.3333es-k15dk825.44f"; 1) 查找字符串中的第一个实数: preg_match("/-?((\.\d+)|(\d+(\.\d+)?))/", $str1, $matches) // <- GOOD! Expected output: -179.3333

我找遍了所有的地方,但我似乎不能只返回第一个正的,真实的数字。到目前为止,我已经成功地找到了如何找到第一个正数或负数,并且只找到了第一个负数。下面是两个我做对了的和一个我拿不到的

$str1 = "-ABS-.-179.3333es-k15dk825.44f";
1) 查找字符串中的第一个实数:

preg_match("/-?((\.\d+)|(\d+(\.\d+)?))/", $str1, $matches) // <- GOOD!
Expected output: -179.3333
Actual output: -179.3333
preg_match("/-((\.\d+)|(\d+(\.\d+)?))/", $str1, $matches) // <- GOOD!
Expected output: -179.3333
Actual output: -179.3333
preg_match("/(?<!-)((\.\d+)|(\d+(\.\d+)?))/", $str1, $matches) //<- WRONG!
Expected output: 15
Actual output: 79.3333
preg\u match(“/-?(\.\d+))(\d+(\.\d+)/”,$str1,$matches)//


非常感谢您的帮助

我想你在寻找:

preg_match('/(?<!-|\d|\.)\d+/', $str1, $matches);
preg_匹配('/(?)?

preg_match('/(?尝试以下操作,看看它是否符合您的要求

preg_match_all('/[^\-\d\.]((?:\d+)(?:(?:\.\d+)|(?:\d+)))/', $str1, $matches);

var_dump($matches[1]);

添加一些输入和期望的输出,同样与您的问题非常接近。我得到的是15和825,而不是15和825.44。它知道不包含任何实数、负数,但只返回正整数。嗯……这会起作用,只是它不识别任何以小数点开头的正数,例如,.1、.99、.052等。
preg_match_all('/[^\-\d\.]((?:\d+)(?:(?:\.\d+)|(?:\d+)))/', $str1, $matches);

var_dump($matches[1]);