This:
d{1,3}(,d{3})*(.dd)?|.dd
matches all of the following numbers:
1
12
.99
12.34
12,345.67
999,999,999,999,999.99
If you want to exclude numbers like 123a
(street addresses for example), or 123.123
(numbers with more than 2 digits after the decimal point), try:
(?<=s|^)(d{1,3}(,d{3})*(.dd)?|.dd)(?=s|$)
A little demo (I guessed you're using PHP):
$text = "666a 1 fd 12 dfsa .99 fds 12.34 dfs 12,345.67 er 666.666 er 999,999,999,999,999.99";
$number_regex = "/(?<=s|^)(?:d{1,3}(?:,d{3})*(?:.dd)?|.dd)(?=s|$)/";
if(preg_match_all($number_regex, $text, $matches)) {
print_r($matches);
}
which will output:
Array
(
[0] => Array
(
[0] => 1
[1] => 12
[2] => .99
[3] => 12.34
[4] => 12,345.67
[5] => 999,999,999,999,999.99
)
)
Note that it ignores the strings 666a
and 666.666
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…