繁体   English   中英

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

[英]PHP Regular Expression Ignore Negative Numbers in String

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

$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


任何帮助是极大的赞赏!

我认为您正在寻找:

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

更新

怎么样:

preg_match('/(?<!-|\d|\.)\d+(\.\d+)?/', $str1, $regs);

请尝试以下操作,看看它是否满足您的要求。

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

var_dump($matches[1]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM