Regex 在算术表达式中查找正数和负数的匹配项

Regex 在算术表达式中查找正数和负数的匹配项,regex,Regex,给定以下算术表达式: -1-5+(-3+2) 需要找到正数和负数的匹配项。对于该表达式,预期结果为:-15-32 我尝试使用正则表达式-?\d+(.\d+)?但是它返回-1-5-3,其中-5不正确 有可能构建正则表达式模式来获取该情况和其他类似情况的正数和负数吗?/((?:^\+-\()(?\d+)/ 您没有说明使用的是什么语言/脚本,但这里有一个PHP示例: $string = '-1-5+(-3+2)'; preg_match_all('/(?:^|\+|-)(-?\d+)/', $stri

给定以下算术表达式: -1-5+(-3+2)

需要找到正数和负数的匹配项。对于该表达式,预期结果为:-15-32

我尝试使用正则表达式-?\d+(.\d+)?但是它返回-1-5-3,其中-5不正确

有可能构建正则表达式模式来获取该情况和其他类似情况的正数和负数吗?

/((?:^\+-\()(?\d+)/

您没有说明使用的是什么语言/脚本,但这里有一个PHP示例:

$string = '-1-5+(-3+2)';
preg_match_all('/(?:^|\+|-)(-?\d+)/', $string, $matches);
print_r($matches[1]);
产出:

Array
(
    [0] => -1
    [1] => 5
    [2] => -3
    [3] => 2
)

说明:有两种分组模式:

/
  (?:^|\+|-|\()
  (-?\d+)
/
第一个组是非捕获组
?:
,还有一个替代组,即匹配列表中的任何字符。该列表中有4个字符:

^
行开始

\+
literal plus

-
减号

\(
literal open paren

第一组是为了突出第二组中可选的
-
。每个数字(正数或负数)前面都会有第一组中列出的一个字符,现在匹配所有后面的字符,包括
-
(如果有)。

您可以使用

(?<!\d)[-]?\d*\.?\d+

请参阅(必要的值在第1组中)。

您使用的是什么语言/工具?如果支持,lookbehinds可能会导致错误。您必须(对您自己和regex)定义-1正确但-5不正确的原因。您可以使用
(^ |\D)([-]?\D*\。?\D+)
(在JS中)或
((如果它是更好的regex引擎)。(?@Alex,我发布了我的建议并添加了解释。
(?:^|\D)([-]?\d*\.?\d+)