Чтобы использовать упрощенный пример, у меня есть:
$str = "Hello :special_text:! Look, I can write \:special_text:";
$pattern = /*???*/":special_text:";
$res = preg_replace($pattern, 'world', $str);
$res = str_replace("/:", ":", $res);
$res === "Hello world! Look, I can write :special_text:"; // => true
Другими словами, я бы хотел «убежать» от того, что я пишу.
Я думаю, что у меня что-то почти работает (используя [^:]?
в качестве первой части шаблона), но я не думаю, что это работает, если $str === ":special_text:", in that
^ doesn't match
[^:]? `.