我正在使用preg_match_all,我想捕获没有字母的浮点数。
例如
-20.4a 110b 139 31c 10.4
所需
[0] => Array
(
[0] => 139
[1] => 10.4
)
我尝试过使用这种模式可以做到相反:
/ \ d +(。\ d +)?(?= [A-Z])/ I
使用you can see in this demo字母捕获数字。但我无法弄清楚如何捕捉没有尾随字母的数字。
答案 0 :(得分:2)
使用否定前瞻:
/\d+(\.\d+)?(?![a-z])/i
但这还不够,你还要排除数字和点:
/\d+(?:\.\d+)?(?![a-z\d.])/i
<强> PHP:强>
$string = '-20.4a 110b 139 31c 10.4';
preg_match_all('/\d+(?:\.\d+)?(?![a-z\d.])/', $string, $match);
print_r($match);
<强>输出:强>
Array
(
[0] => Array
(
[0] => 139
[1] => 10.4
)
)
答案 1 :(得分:1)
你可以使用这个正则表达式做出积极的前瞻:
[+-]?\b\d*\.?\d+(?=\h|$)
(?=\h|$)
断言在匹配的数字后存在水平空格或行尾。
或者您可以将此正则表达式用于占有量词:
[+-]?\b\d*\.?\d++(?![.a-zA-Z])
答案 2 :(得分:1)
这里可以采取一些方法。
原子组匹配和负前瞻或字边界:
(?>\d+(?:\.\d+)?)(?![a-z])
(?>\d+(?:\.\d+)?)\b
使用否定前瞻也拒绝点和数字:
\d+(?:\.\d+)?(?![a-z.\d])
空格的正向预测(这里似乎是分隔符)或字符串
的结尾 \d+(?:\.\d+)?(?=\s|$)