只求数学方程中的整数...
5 + 5.5 + 6 / 2.0
我想找到 5 和 6 而不是 5.5 或 2.0 要找到小数,我使用 \d+(.\d{1,})
我试过 \b\d+\b 但这找到了所有的数字
只求数学方程中的整数...
5 + 5.5 + 6 / 2.0
我想找到 5 和 6 而不是 5.5 或 2.0 要找到小数,我使用 \d+(.\d{1,})
我试过 \b\d+\b 但这找到了所有的数字
如果您的正则表达式引擎支持,您可以使用负后瞻和前瞻。正则表达式将是:
(?<!\.)\d+(?!\.)
后视确保数字字符串不以 a 开头.
,因此.5
不会匹配类似的内容。前瞻确保数字字符串不以 a 结尾.
,因此5.
不会匹配。
您可以尝试查找所有没有“。”的数字。在前面,后面有空格,如下所示:
[^\.]([0-9]+)\s
可以试试这个:
/(?:^|[^\.])(\d+)(?:\s+|$)/
确保数字不以点开头,或者是字符串的开头,并确保数字后跟空格或字符串的结尾。
这是一个实际的 PHP 示例:
preg_match_all('/(?:^|[^\.])(\d+)(?:\s+|$)/', '5 + 5.5 + 6 / 2.0 + 33 * 16', $matches);
var_dump($matches);
/* Var Dump:
array (size=2)
0 =>
array (size=4)
0 => string '5 ' (length=2)
1 => string ' 6 ' (length=3)
2 => string ' 33 ' (length=4)
3 => string ' 16' (length=3)
1 =>
array (size=4)
0 => string '5' (length=1)
1 => string '6' (length=1)
2 => string '33' (length=2)
3 => string '16' (length=2)
*/
所以捕获的是 5、6、33 和 16(我添加了一些更长的数字以确保它有效)