0

のような数式を含む文字列があります(21)*(4+2)。計算のために、式の間に数字が含まれないように「単純化」する必要があります(つまり、(21)*(4+2) => 21*(4+2))。私はそれを行う方法がわかりません(正規表現の置換で何かを考えましたが、それを処理するのはあまり得意ではありません)。

4

2 に答える 2

0

次のようなアルゴリズムを実行できます。

$str = "(21)*(4+2)";
//split above to array of characters
$arr = str_split($str);

foreach($arr as $i => $char) {
   if character is opening parenthesis {
     get all characters in a string until closing parnethesis is found
   endif }

   if the string you received from above contains only digits 
   (means it has no expression i.e. +,-,/,%,*) then remove the first and last 
   characters of the above string which are the parenthesis and append the 
   string to the final string.
}
于 2013-02-21T17:13:01.760 に答える
0

さて、私は誤って問題を解決したようです(これまでのところ、preg_replace私にとってはうまくいきます):

echo preg_replace( "/\((\d+)\)/", "$1", $eq );

小数は考慮されていないと思います。サンプルの方程式とそれが生成する出力は、ここcodepadにあります。

小数について[\d\.]+は、正規表現で a を使用しました。それは働いているようです。

echo preg_replace( "/\(([\d\.]+)\)/", "$1", $eq );

別のリンク

于 2013-02-21T17:19:03.420 に答える