试图用正则表达式解析数字

Dav*_*ies 1 php regex

我正在尝试解析文本中的所有数字:

text 2030 text 2,5 text 2.000.000 2,000,000 -200 +31600000000. 200. 2.5 200? 1:200
Run Code Online (Sandbox Code Playgroud)

基于此正则表达式:

text 2030 text 2,5 text 2.000.000 2,000,000 -200 +31600000000. 200. 2.5 200? 1:200
Run Code Online (Sandbox Code Playgroud)

但结局喜欢.?!,右后数不匹配。我只想与进行完整比赛preg_match_all。(见图片)

比赛概述

我想问题出在我的正则表达式的最后一部分(?!\S)。我尝试了不同的方法,但是我不知道该如何解决。

Emm*_*mma 5

如果我们不想验证我们的数字,那么也许可以从一个简单的表达式开始,也许类似于:

(?:^|\s)([+-]?[\d:.,]*\d)\b
Run Code Online (Sandbox Code Playgroud)

测试

$re = '/(?:^|\s)([+-]?[\d:.,]*\d)\b/s';
$str = 'text 2030 text 2,5 text 2.000.000 2,000,000 -200 +31600000000. 200. 2.5 200? 1:200
';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

var_dump($matches);
Run Code Online (Sandbox Code Playgroud)

如果您有兴趣,可以在此演示的右侧面板中进一步解释该表达式。


编辑:

另一个表达式是:

(?:^|\s)\K[+-]?(?:\d+:\d+|\d+(?:[.,]\d{1,3})+|\d+)\b
Run Code Online (Sandbox Code Playgroud)

仍然无法验证我们的电话号码,而只是收集列出的电话号码以及一些无效的电话号码。

演示2

演示3

  • 请注意,最后一次使用带有`\ b`数字(前缀减号或加号)-123和+123的编辑时,不会分组到匹配项中 (2认同)