preg_replace_callback不在php中工作

时间:2015-02-14 07:02:56

标签: php regex preg-replace preg-replace-callback

$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);

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

2 个答案:

答案 0 :(得分:0)

您不需要回调,使用preg_replace()可以完成此任务。要匹配单个反斜杠,您需要双重转义,这意味着\\\\。要匹配每个子字符串之间可能的空格,可以使用\s*表示空格“零或更多”次。

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

答案 1 :(得分:0)

试试这个:

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