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