猿问

PHP - 将点替换为箭头

我在我的数据库中获取了这些数据:


如您所见,我在数据库中存储了一个 html 模板。


这是我用来输出该 html 的代码:


$php = Blade::compileString($template->content);

dd($php) //i used laravel framework, btw.

然后这是输出:


<!doctype html>

<html>

<head>

    <meta charset="UTF-8">

    <title>Exmaple.com</title>

    <style>

    </style>

</head>

<body>


    <div class="account-details">

        <b>Account Name</b>: <?php echo e(company.name); ?><br>

        <b>Plan</b>: <?php echo e(plan.name); ?><br>

        <b>Source</b>: <?php echo e(source.name); ?><br>

        <b>Source Type</b>: <?php echo e(source.source_type.name); ?><br>

        <br>

    </div>


    <div class="welcome" style="font-family:Arial;font-size:small">

        Hi <?php echo e(user.first_name); ?>,<br>

        <br>

        There seems to be a problem blah blah blah<br>

        <br>

        Details of the problem are:<br>

        <?php echo e(sourceMessage); ?><br>

        <br>

        You can check and update the source here:<br>

        https://example.com<br>

        <br>

        <br>

        <span style="font-size:12.8px">

            Kind regards,<br>

            <br>

           Test Team<br>

            <br>

            Email: <a href="mailto:test@example.com" target="_blank">example.com</a><br>

            Website: <a href="http://example.com" target="_blank">example.com</a><br>

        </span>

    </div>

</body>

</html>

我想在这个例子中将.(dot) 更改为->so,一些文本将输出如下:


从<?php echo e(company.name); ?>到<?php echo e(company->name); ?>


从<?php echo e(source.name); ?>到<?php echo e(source->name); ?>


所以我认为如果它在 a<?php echo e(whatever);  ?>那是我们检查并替换为的.时间->?


我认为这可以通过 RegEx 来完成,但我不是这方面的专家。


我想替换它的原因是因为我从电子邮件服务获取模板然后返回.,所以我想替换它->因为我知道 PHP 读取->访问对象而不是..


子衿沉夜
浏览 85回答 2
2回答

HUWWW

您可以使用preg_replace查找匹配的代码片段<?php ... e(f)并将.sf替换为->:$html = preg_replace_callback('/(<\?php\s+.*?\be\()([^)]+\))/',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; function ($m) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return "{$m[1]}$" . str_replace('.', '->', $m[2]);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $html);请注意,我们使用回调,因为它可以更轻松地处理替换a.b.c为a->b->c. 此外,要真正看起来像 PHP,您需要$在变量名的开头添加一个,这段代码就是这样做的。如果您不想要它,只需更改{$m[1]}$为{$m[1]}3v4l.org 上的演示

茅侃侃

如果你在像 VS code 或 sublime 这样的编辑器上这样做,你只需要替换 function e usage 部分。CTRL + H(在 sublime 或 VS 代码中)打开替换对话框。确保单击正则表达式选项。这样就可以了;搜索(e\(.+)\.(.+\))代替$1->$3
随时随地看视频慕课网APP
我要回答