preg_replace_callback 在 php 中不工作

preg_replace_callback not working in php

$str="Your LaTeX document can \DIFaddbegin \DIFadd{test}\DIFaddend be easily 
and the text can have multiple lines in it like this\DIFaddbegin \DIFadd{test2}
\DIFaddend"

我需要将所有 \DIFaddbegin \DIFadd{test}\DIFaddend 转换为 \added{test}

我试过了

$o= preg_replace_callback('/\DIFaddbegin\s\DIFadd{(.*?)}\DIFaddend/',
function($m) {return preg_replace('/$m[0]/','\added{$m[1]}',$m[0]);},$str);

但运气不好。哪个是正确的模式?而且即使字符串包含换行符,模式也应该有效。

您不需要回调,使用 preg_replace() 就可以完成此任务。要匹配单个反斜杠,您需要对其进行双重转义,即 \\。要匹配每个子字符串之间可能的空格,您可以使用 \s* 表示空格 "zero or more" 次。

$str = preg_replace('~\\DIFaddbegin\s*\\DIFadd({[^}]*})\s*\\DIFaddend~', '\added', $str);

试试这个:

$new_str = preg_replace("/\\DIFaddbegin \\DIFadd\{(.*)\}\\DIFaddend/s","\added{$1}",$str);