PHP скрипт, позволяющий найти и заменить текст в фигурных скобочках.

Для примера у нас есть строка:

$str='<p>Текст текст текст текст текст текст текст текст текст {file=http://domain.co/file.txt=name=имя ссылки на файл}</p>
<p>текст текст текст {file=http://domain2.co/file2.txt=name=имя 2 ссылки на файл}</p>
<p>текст текст текст текст текст текст</p>';

Нам понадобится найти и заменить данные в фигурных скобках при помощи PHP. Заменять мы будем на пути к файлу, указанному в этих данных и на название ссылки, которые также указаны там.

Например, нам придется разбить вот эту строку:

{file=http://domain.co/file.txt=name=имя ссылки на файл}

На массив и сделать замену на:

<a target="_blank" href="https://link.inverser.pro/r2?l=http://domain.co/file.txt">имя ссылки на файл</a>

Чтобы это сделать мы будем использовать регулярное выражение и немного рекурсии)

//find files links
//находим все, что лежит в {...}
preg_match_all("|\{([^}]+)|i", $str, $regs);
//$regs - это ответный массив найденных совпадений
//если он не пустой, то ...
if(!empty($regs[1])){
   //создадим пустой массив
   $findFilesLinks=array();
   //пройдемся по массиву с совпадениями
   foreach($regs[1] as $z){
      $z=explode('=',$z);
      //наполним пустой массив данными
      array_push($findFilesLinks, array($z[1]=>$z[3]));
   }
   $out='';
   $i=0;
   //пройдемся по массиву с полученными данными
   foreach ($findFilesLinks as $k=>$v) {
      //и еще пройдемся по массиву со значениями массива
      foreach ($v as $a=>$q) {
         //var_dump($a,$q);
         //заменим все совпадения на необходимые нам данные
         //в данном примере мы заменяем на ссылку
         //где $a - это ссылка
         //$q - это название ссылки
         //например: {file=https://inverser.pro/file.txt=name=имя ссылки}
         $str=str_replace('{'.$regs[1][$i].'}','<span class="in linkIn" onclick="window.open(\'files/?f='.base64_encode($a).'\')">'.$q.'</span>',$str);
      };
      $i++;
   }
}
//\ find files links

В результате выполнения данного скрипта мы получим:

<p>Текст текст текст текст текст текст текст текст текст <span class="in linkIn" onclick="window.open('/files/?f=aHR0cDovL2RvbWFpbi5jby9maWxlLnR4dA==')">имя ссылки на файл</span></p>
<p>текст текст текст <span class="in linkIn" onclick="window.open('/files/?f=aHR0cDovL2RvbWFpbjIuY28vZmlsZTIudHh0')">имя 2 ссылки на файл</span></p>
<p>текст текст текст текст текст текст</p>
Внимание! Если Ваша строка $str УЖЕ содержит фигурные скобки, то в коде замените одинарные фигурные скобки на двойные.
{ >> {{
} >> }}
Поиск и замена текста в скобочках PHP