我正在做一个保理程序我想知道是否有人能帮助我。隔离数值公式
说我有喜欢
5x^2 + 3x + 7
我需要隔离5,3和7
的公式虽然也可以拿出负号反对阳性体征以及。
是否有任何有效的正则表达式可以做到这一点?我现在这样做的方式相当长,效率不高。
我正在做一个保理程序我想知道是否有人能帮助我。隔离数值公式
说我有喜欢
5x^2 + 3x + 7
我需要隔离5,3和7
的公式虽然也可以拿出负号反对阳性体征以及。
是否有任何有效的正则表达式可以做到这一点?我现在这样做的方式相当长,效率不高。
尝试用以下的正则表达式:
(?:^|[^\^])((?:\- *)?\d+)
与preg_match_all
功能结合起来。
说明:
它匹配所有的数字
(\d+)
可选负号(whitespacesbetween允许)
(?:\- *)?
未遵循与^
标志
或都在串
^
的beggining(所以有^|[^\^]
)
(?:^|[^\^])
的最好的办法是通过构建表达解析它树(就像编译器一样)。请注意,正则表达式或拆分将不考虑运算符优先级,如(2 + x)^2
基本上5X^2 + 3X + 7应该然而解析为
+
/ \
+ 7
/ \
* *
/\ /\
5 ^ 3 x
/\
x 2
,如果你能承担的格式,如an x^n + a(n-1) x^(n-1) + ... a1 x + a0
那么你可以删除你不需要的一切,你可以试试这个
$string = '5x^2 + 3x + 7';
$replace = '';
$pattern = '/x(\^(\d)*)?/';
echo preg_replace($pattern, $replacement, $string);
// echos 5 + 3 + 7;
您应该能够从那里取,如
$stripped = preg_replace($pattern, $replacement, $string);
$modified = str_replace(array('+', '-'), '|', $stripped);
$parts = explode('|', $modified);
print_r($parts);
// should be array(5, 3, 7);
+1非常酷,但它不包括负面信号。 '(?:^ | [^ \ ^])( - ?\ d +)'应该解决这个问题。虽然我想这将需要'-'紧挨数字......嗯。 – ohaal 2012-02-23 15:59:52
啊,你是对的 - 我只是忘了它,谢谢。 ;-) – hsz 2012-02-23 16:05:05
我也已经改进了一点,允许空格。 – hsz 2012-02-23 16:08:11