2011-07-29 40 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由於一噸,我所需要的。 –