2013-04-17 55 views
0

我需要幫助編寫一個註冊表項,或者可能更多的是爲了搜索某個字符串。正則表達式可以從字符串中獲得計算結果

首先,它搜索有小數點或逗號的數字串(0到9),但小數點和逗號只能在兩個數字之間。沒有兩個相鄰的小數點,或兩個逗號,或逗號旁邊的小數點或小數點後面的逗號。

然後如果找到了,它會搜索同一個字符串中的數字0到9,打開圓括號,打開方括號或開放大括號,只要它找到任何數字,任何括號,任何正方形括號,任何大括號,兩個數字之間的逗號,兩個數字之間的任意小數點,任何加號(+),小數點( - ),星號(*)或正斜槓(/),以及兩者之間的空格他們。它停在最後一個空格,關閉括號,關閉方括號或近距離大括號。

我想解析數據,看起來像一個計算,然後解決它。

例如,在字符串中

'The quick brown 1234*(5+2) jumps over" 

取出

the 1234*(5+2) 

在字符串

'[5/{4+(5*2)-1}] on a sunny (2 day.' 

取出只有

[5/{4+(5*2)-1}] 
+2

從正則表達式不太適合的意義上講,這不是一個常規問題;但也許遞歸模式可以做到這一點。 –

+0

@Jack嗯我從來沒有聽說過遞歸正則表達式。 –

+1

相信我,你不[想知道](http://sg2.php.net/manual/en/regexp.reference.recursive.php):) –

回答

0

使用正則表達式無法100%解決此任務。最好的辦法是使用正則表達式來分離看起來像表達式的東西,然後使用其他引擎來嘗試並計算它。

這應該是很好的開始:拿出的數字,括號,括號任何連續序列,和算術符號:

([-\+\*/\[\]\(\)\d\s]+) 

如果通過計算引擎產量錯誤運行這場比賽的結果,直接跳過它,並嘗試下一場比賽。

+0

謝謝。我試過了,它似乎匹配所有的計算像字符串,除了它也匹配允許的字符之前和之間的所有空格。我怎樣才能讓它只包含數字後面的空格+, - ,*,/,(,),{,},[,或]。 –

+0

那麼,你可以在調用計算之前[修剪()'](http://php.net/manual/en/function.trim.php)你的匹配字符串。您也可以使用['str_replace()'](http://php.net/manual/en/function.str-replace.php)簡單地刪除所有空格。但是,如果你的計算引擎是好的,它應該自己處理額外的空間。 – mvp

相關問題