Замена всех значений любых слов, заключенных в скобки, в строке


Обычно я довольно эффективно решаю проблемы PHP самостоятельно, однако с этой конкретной проблемой я, похоже, не могу найти рабочего решения.

У меня есть строка $, которая состоит из стандартного текста, и в тексте будут определенные ключевые слова, заключенные в [квадратные скобки], которые я хочу преобразовать в ссылки, однако это не простой случай сравнения строки с предопределенным массивом "известных" ключевых слов и выполнения простой замены, потому что содержимое [квадратных скобок] не может быть преобразовано в ссылки. скобки] может быть что угодно.

Например, мне понадобится следующее:

John Roberts is a jazz musician from Florida born in 1934. Some of his notable works include [A Gray Sky] and [Sophomore Effort].

Следует преобразовать в следующее:

John Roberts is a jazz musician from Florida born in 1934. Some of his notable works include <a href="search.php?search=a+gray+sky">A Gray Sky</a> and <a href="search.php?search=sophomore+effort">Sophomore Effort</a>.

Следует отметить, что:

  • Строка $ будет содержать неизвестное количество [слов в квадратных скобках].
  • Использование квадратных скобок не обязательно, если это вызовет проблемы, но на данный момент это кажется мне наиболее удобным методом.

Я не прошу кого-то дать мне код, все, что мне нужно, это чтобы кто-то сказал мне, что вид функции PHP, которую я должен исследовать и указать мне в правильном направлении!

Большое вам всем спасибо, и спасибо Stackoverflow за то, что дали мне возможность спросить!

Author: juanitojuandejuanes, 2012-05-08

1 answers

$string = "John Roberts is a jazz musician from Florida born in 1934. Some of his notable works include [A Gray Sky] and [Sophomore Effort].";

function rep_callback($match)
{
        $query = substr($match[0],1,-1);
        $query = urlencode($query);
        $link = '<a href="search.php?search='.$query.'">'.$match[0].'</a>';
        return $link;
}

echo $string."\n";
echo preg_replace_callback("/\[.+\]/U", "rep_callback", $string)."\n";

Вывод:

John Roberts is a jazz musician from Florida born in 1934. Some of his notable works include [A Gray Sky] and [Sophomore Effort].
John Roberts is a jazz musician from Florida born in 1934. Some of his notable works include <a href="search.php?search=A+Gray+Sky">[A Gray Sky]</a> and <a href="search.php?search=Sophomore+Effort">[Sophomore Effort]</a>.
 3
Author: ccKep, 2012-05-08 03:14:16