首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >隔离数值方程

隔离数值方程
EN

Stack Overflow用户
提问于 2012-02-23 23:49:30
回答 2查看 63关注 0票数 2

对于我正在制作的一个保理程序,我想知道是否有人可以帮助我。

假设我有一个等式,比如

代码语言:javascript
复制
5x^2 + 3x + 7

我需要隔离5,3和7

尽管它可能会提出负面的迹象,但它也与积极的迹象相反。

有没有什么有效的正则表达式可以做到这一点?因为我现在做的方式相当长,效率也不是很高。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-23 23:53:24

使用以下正则表达式进行尝试:

代码语言:javascript
复制
(?:^|[^\^])((?:\- *)?\d+)

preg_match_all函数结合使用。

说明:

它匹配所有的数字

代码语言:javascript
复制
(\d+)

带可选负号(允许在空格之间)

代码语言:javascript
复制
(?:\- *)?

后面不带^符号的

代码语言:javascript
复制
[^\^]

或者是靠绳子的乞讨

代码语言:javascript
复制
^

(因此存在^|[^\^])在未捕获的组中匹配

代码语言:javascript
复制
(?:^|[^\^])
票数 3
EN

Stack Overflow用户

发布于 2012-02-24 00:04:53

最好的方法是通过构造表达式树来解析它(就像编译器一样)。请注意,正则表达式或拆分不会考虑运算符优先级,例如(2 + x)^2

基本上,5x^2 + 3x +7应该解析为

代码语言:javascript
复制
          +
        /   \
      +      7
   /     \
  *        *
 / \      / \
5   ^    3   x
   / \
  x   2

但是,如果您可以采用诸如an x^n + a(n-1) x^(n-1) + ... a1 x + a0之类的格式,那么您可以删除所有不需要的内容,您可以尝试这样做

代码语言:javascript
复制
$string = '5x^2 + 3x + 7';
$replace = '';
$pattern = '/x(\^(\d)*)?/';

echo preg_replace( $pattern, $replacement, $string );
// echos 5 + 3 + 7;

你应该能够从那里拿到,例如

代码语言:javascript
复制
$stripped = preg_replace( $pattern, $replacement, $string );
$modified = str_replace( array( '+', '-' ), '|', $stripped );
$parts = explode( '|', $modified );
print_r( $parts );
// should be array( 5, 3, 7 );
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9416403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档