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

时间:2018-10-03 00:53:16

标签: php expression ignore

我到处都看过,但是似乎不能只返回第一个正实数。到目前为止,我已经成功地找到了如何找到第一个正数或负数,并且也只找到了第一个负数。以下是我正确执行的两个操作,以及我无法正确执行的操作。

$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


任何帮助将不胜感激!

2 个答案:

答案 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]);