我想弄清楚,如何使用php刪除數學表達式中的括號。刪除數學表達式中的括號括起PHP
有些情況是:
(A + B)(B + C)應保持不變
((((A))))應該得到一個
((A(B + C) ))應該得到A *(B + C)
(((((B + C)* A))))應該得到(B + C)* A
我無法找到一個解決方案,它是正確的任何情況。使用分配財產等數學規則是沒有選擇的。
我不是在尋找複製粘貼算法,只是一個適合我所有案例的標準。 這是最新的嘗試,我嘗試了像正則表達式這樣的不同方法,但我沒有弄明白。
function removeSurroundingBrackets($str)
{
$res=$str;
if(strcmp($res[0],'(')===0 && strcmp($res[strlen($res)-1],')')===0)
{
$firstOther=0;
for(; $firstOther<strlen($str);$firstOther++)
{
if(strcmp($str[$firstOther],'(')!==0)
break;
}
$removableCount=0;
$removableCount=substr_count($str,')',$firstOther)-substr_count($str,'(',$firstOther);
}
return substr($str,$removableCount,-$removableCount);
}
編輯:我發現了一個解決方案:
function removeSurroundingBrackets($str)
{
$res=$str;
while(strcmp($res[0],'(')===0 && strcmp($res[strlen($res)-1],')')===0)
{
if($this->checkBrackets(substr($res,1,-1)))
$res=substr($res,1,-1);
else
return $res;
}
return $res;
}
function checkBrackets($str)
{
$currdepth=0;
foreach(str_split($str) as $char)
{
if(strcmp($char,')')===0)
{
if($currdepth<=0)
return false;
else
$currdepth--;
}
else if(strcmp($char,'(')===0)
$currdepth++;
}
return true;
}
請給我們看看你現在試過什麼。喲去哪個方法去除括號?然後社區會幫助你。你可以用正則表達式,或者字符串提取或者或者... –
用正則表達式,你可以嘗試[類似這個demo的東西](https://eval.in/822350)。 –
@bobblebubble:這是可能性,但不是使用'while'和'preg_match',而應該使用'do ... while'和'preg_replace'的count參數。 –