【问题标题】:Preg_replace simple math problem with solution?Preg_replace 用解决方案替换简单的数学问题?
【发布时间】:2011-07-29 01:34:04
【问题描述】:

我的字符串包含简单的数学问题 1+10、2+2、5-3...我希望能够匹配这些数学问题并用解决方案替换它们。

所以:吉米周五满 5+5 岁。改为:吉米周五满 10 岁。

此时我不需要乘法或除法,所以我认为它相对简单,但我没有接受过 PHP 的经典训练。我想我需要一个正则表达式来匹配问题,但我几乎从那里迷失了。

1+10 becomes 11
2+2 becomes 4

【问题讨论】:

  • 您在哪个部分遇到了问题?制定适当的正则表达式?做计算?将结果代入输出字符串?
  • 就像奥利说的,这里到底有什么问题?
  • 您需要编写一个正则表达式来隔离和捕获两个数字和运算符。然后分析运算符并评估表达式(从正则表达式的捕获部分),并用评估表达式的结果替换原始模式。随着数学表达式复杂性的增加,处理它们的正则表达式的适用性会降低,即使您继续使用正则表达式来隔离数学表达式,您最终也可能需要语法和词法分析器来处理表达式。表达。
  • @Jonathan Leffler:技术上是对的,但是已经有一个解析器可以评估这样的数学表达式:PHP 本身。只是评估它,有一个正则表达式修饰符。请参阅下面的答案。
  • @Hakre:有趣-谢谢。

标签: php regex math preg-replace


【解决方案1】:

只需“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);

【讨论】:

  • 巧妙使用eval,但谨防eval D=
  • @hakre 非常感谢,正是我所需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多