Monday 3 September 2018

PHP Regex how to capture floating-point numbers that do not have a letter at the end

I'm using preg_match_all and I want to capture the floating point numbers that do not have a letter following them.

For example
-20.4a 110b 139 31c 10.4

Desired
[0] => Array
    (
        [0] => 139
        [1] => 10.4
    )

I've tried was able do to the opposite using this pattern:
/\d+(.\d+)?(?=[a-z])/i
which captures the numbers with letters that you can see in this demo. But I can't figure out how to capture the numbers that have no trailing letters.

You can use this regex with a positive lookahead:
[+-]?\b\d*\.?\d+(?=\h|$)

(?=\h|$) asserts presence of a horizontal white space or end of line after matched number.
Alternatively you can use this regex with a possessive quantifier:
[+-]?\b\d*\.?\d++(?![.a-zA-Z])

0 comments:

Post a Comment