php - 如何操作字符串以便在数学表达式中显式显示隐式乘法?

标签 php regex preg-replace

我想操纵像“...4+3(4-2)-...”这样的字符串变成“...4+3*(4-2)-...”,但它当然应该识别任何数字,d,然后是'('并将其更改为'd*('。我还想将')('更改为')*('如果可能,同时进行。如果有可能添加对 pi 或 e 等常量的支持,那就太好了。

现在,我只是用这种愚蠢的方式来做:

private function make_implicit_multiplication_explicit($string)
{
    $i=1;
    if(strlen($string)>1)
    {
        while(($i=strpos($string,"(",$i))!==false)
        {
            if(strpos("0123456789",substr($string,$i-1,1))) 
            {
                $string=substr_replace($string,"*(",$i,1);
                $i++;
            }
            $i++;
        }

        $string=str_replace(")(",")*(",$string);
    }        
    return $string;
 }

但我相信使用 preg_replace 或其他一些正则表达式函数可以做得更好?但是我认为那些手册真的很难掌握。

最佳答案

让我们从您要查找的内容开始:

  • 以下任一项:((a|b) 将匹配 ab)
    • 任何数字,\d
    • 字符):\)
  • 后跟 (: \(

它创建了这个模式:(\d|\))\(。但是由于你想修改字符串并保留这两个部分,你可以将 \( 这导致 (\() 更难阅读但更好处理。

现在剩下的就是告诉如何重新排列,很简单:\\1*\\2,留给你这样的代码

$regex = "/(\d|\))(\()/";
$replace = "\\1*\\2";
$new = preg_replace($regex, $replace, $test);

要查看该模式实际上匹配所有情况,请参阅 this example .

关于php - 如何操作字符串以便在数学表达式中显式显示隐式乘法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24501213/

相关文章:

PHP/MySqli 检查表 A ID 与表 B ID

php - 如何解决 Laravel 中的 "CSRF Token Mismatch"

PHP 生成 JSON 时出现问题

c++ - 将正则表达式转换/编译为 C 代码

PHP 条件字符串替换 str_replace

php - 你如何使 preg_replace 捕获大写 (php)?

javascript - 在 Yii2 中使用 Javascript 获取隐藏输入字段设置的值

C#正则表达式匹配字符串中的特定索引?

php - 正则表达式匹配,如果不是在单词之后

php - 在每次字符更改时将空格插入字符串