对于我正在制作的一个保理程序,我想知道是否有人可以帮助我。
假设我有一个等式,比如
5x^2 + 3x + 7我需要隔离5,3和7
尽管它可能会提出负面的迹象,但它也与积极的迹象相反。
有没有什么有效的正则表达式可以做到这一点?因为我现在做的方式相当长,效率也不是很高。
发布于 2012-02-23 23:53:24
使用以下正则表达式进行尝试:
(?:^|[^\^])((?:\- *)?\d+)与preg_match_all函数结合使用。
说明:
它匹配所有的数字
(\d+)带可选负号(允许在空格之间)
(?:\- *)?后面不带^符号的
[^\^]或者是靠绳子的乞讨
^(因此存在^|[^\^])在未捕获的组中匹配
(?:^|[^\^])发布于 2012-02-24 00:04:53
最好的方法是通过构造表达式树来解析它(就像编译器一样)。请注意,正则表达式或拆分不会考虑运算符优先级,例如(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 );https://stackoverflow.com/questions/9416403
复制相似问题