我正在尝试解析文本中的所有数字:
text 2030 text 2,5 text 2.000.000 2,000,000 -200 +31600000000. 200. 2.5 200? 1:200
基于此正则表达式:
(?<!\S)(\-?|\+?)(\d*\.?\,?\d+|\d{1,3}(,?.?\d{3})*(\.\,\d+)?)(?!\S)
但数字不匹配后,像.
,?
,!
,,
之类的结尾。我只想与preg_match_all
进行完全匹配。 (参见图片)
我想问题出在我的正则表达式(?!\S)
的最后一部分。我尝试了不同的方法,但是我不知道该如何解决。
答案 0 :(得分:5)
如果我们不想验证我们的数字,也许我们可以从一个简单的表达式开始,也许类似于:
(?:^|\s)([+-]?[\d:.,]*\d)\b
$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);
如果您有兴趣,可以在this demo的右侧面板中进一步解释该表达式。
编辑:
另一种表达方式是:
(?:^|\s)\K[+-]?(?:\d+:\d+|\d+(?:[.,]\d{1,3})+|\d+)\b
仍然无法验证我们的电话号码,只是收集列出的电话号码以及一些无效的电话号码。