如何使用preg_replace()获取结果文本和替换项?

时间:2015-02-03 10:58:30

标签: php regex preg-replace

如何在PHP中使用preg_replace()(或任何其他功能)获取结果文本和替换文本?

// Have:
$txt = "Lorem ipsum dolor sit amet, REPLACE_ME consectetur adipiscing elit.";

// Desired result:
$txt == "Lorem ipsum dolor sit amet, WAS_REPLACED consectetur adipiscing elit."
$replaced_text == 'REPLACE_ME'

preg_replace()似乎返回替换的部分或结果文本。在preg_replace()调用之后,${1}变量似乎是空的;

EDIT2 :得到了外界的帮助,这里是最终版本:

$re = "/REPLACE_ME/i";
$str = "Lorem ipsum dolor sit amet, REPLACE_ME consectetur adipiscing elit.";
$subst = "WAS_REPLACED";

$replacements;

$result = preg_replace_callback(
    $re, 
    function ($matches) use(&$replacements, $subst)  {
        $replacements = $matches[0];
        return $subst;
    },
    $str, 1);

echo $result."\n";
echo $replacements;

3 个答案:

答案 0 :(得分:1)

(REPLACE_ME)

直接使用。参见演示。

https://regex101.com/r/vD5iH9/56

$re = "/(REPLACE_ME)/im";
$str = "Lorem ipsum dolor sit amet, REPLACE_ME consectetur adipiscing elit.";
$subst = "WAS_REPLACED";

$result = preg_replace($re, $subst, $str);

$1\1将包含已替换的文字。

编辑:要获得Replaced content,您可以使用此功能。检查数组$matches

$re = "/(REPLACE_ME)/im";
$str = "Lorem ipsum dolor sit amet, REPLACE_ME consectetur adipiscing elit.";

preg_match_all($re, $str, $matches);

答案 1 :(得分:0)

将变量放在使用.运算符串联的php分隔符中。

$txt = "Lorem ipsum dolor sit amet, REPLACE_ME consectetur adipiscing elit.";
$text_to_replace = 'REPLACE_ME';
$replaced_text = 'WAS_REPLACED';
echo preg_replace('~'.$text_to_replace.'~', $replaced_text, $txt);

<强>输出:

Lorem ipsum dolor sit amet, WAS_REPLACED consectetur adipiscing elit.

答案 2 :(得分:0)

试试这个。

$txt = "Lorem ipsumdolor sit amet REPLACE_ME consectetur adipiscing elit.";
$replaced_text=preg_replace("/REPLACE_ME/","REPLACED_TEXT",$txt);

如果成功找到并替换了文本,则将使用所需的输出填充给定的变量。