$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*
значение пробела «ноль или более» раз.
$str = preg_replace('~\\\\DIFaddbegin\s*\\\\DIFadd({[^}]*})\s*\\\\DIFaddend~', '\added$1', $str);
Попробуй это:
$new_str = preg_replace("/\\\\DIFaddbegin \\\\DIFadd\{(.*)\}\\\\DIFaddend/s","\\added{\$1}",$str);