2011-07-29 61 views
1

我有一个包含简单的数学题1 + 10,2 + 2,5-3串...我希望能够匹配这些数学问题和解决方案替换它们。Preg_replace解决简单的数学问题?

这样:吉米变成5 + 5上周五。改为:吉米周五将变为10。

我不需要乘除在这一点,所以我认为它比较简单但林不经典的PHP培训。我认为我需要一个REGEX来解决问题,但我几乎从那里输了。

1+10 becomes 11 
2+2 becomes 4 
+0

哪些是你遇到问题的一部分?制定合适的正则表达式?做计算?将结果代入输出字符串? –

+0

就像奥利说的那样,这里有什么问题呢? –

+1

你需要写一个正则表达式来隔离和捕获两个数字和运算符。然后分析运算符并评估表达式(从正则表达式的捕获部分),并用评估表达式的结果替换原始模式。当你增加数学表达式的复杂性时,正则表达式处理它们的适当性就会降低,并且最终你可能最终需要一个语法和词法分析器来处理表达式,即使你继续使用正则表达式来隔离数学表达。 –

回答

3

只是 “EVAL” 替换 - 但照顾,它的eval(Demo):

$subject = 'Jimmy turns 5+5 on Friday, Martha 1+10 on Saturday and Petra is 2*2 today.'; 

$pattern = '~(\d+[*/+-]\d+)~e'; 
#       ^^^ e = eval modifier 

# Jimmy turns 10 on Friday, Martha 11 on Saturday and Petra is 4 today. 
echo preg_replace($pattern, '$1', $subject); 
+2

巧妙使用eval,但要注意的eval d的= – afuzzyllama

+0

@hakre由于一吨,我所需要的。 –