dourang8305 2017-02-23 12:49
浏览 67
已采纳

替换preg_replace模式中的两个值

I have a regex that searches for occurences like this in a text:

to find

[pass id="HEH0Iu6rYl"][/pass]

Regex

preg_match_all('@\[pass id="(.*?)"\]\[\/pass\]@', $text, $matches);

For all the found $matches I lookup the "code" in my Database and if found I want to fill the password from the database so that the text looks like this: [pass id="HEH0Iu6rYl"]MYPASSWORD[/pass]

Function

preg_match_all('@\[pass id="(.*?)"\]\[\/pass\]@', $docPart->getText(), $matches);

foreach ($matches[1] as $key => $match) {

    /* Try to find existing Code and Update Password */
    $password = $this->getDoctrine()->getRepository('AppBundle:Password')->findOneBy(array(
        'code' => $match,
    ));

    /* Check if it s Users own Password or User is able via AccesGroup */
    if($aG->getCanPassword() === true || $password->getUser() === $this->getUser()){

        /* Update the text */
        $pwText = preg_replace('#(\]).*?(\[/pass])#', $password->getPass(), $docPart->getText());
    }
}

But then the replacement looks like this: [pass id="HEH0Iu6rYl"MYPASS How do I have to change the regex?

  • 写回答

1条回答 默认 最新

  • drd94483 2017-02-23 12:51
    关注

    Change to this:

    $pwText = preg_replace('#(\]).*?(\[/pass])#', '$1'.$password->getPass().'$2', $docPart->getText());
    //                                            ^^^^^                    ^^^^^
    

    $1 contains the group 1 ie. ] and $2 contains [/pass]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化