$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);
但没有运气。哪个是正确的模式呢?而且即使字符串包含新行字符,该模式也应该有效。
答案 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);