Как преобразовать текст хэштега в гиперссылку хэштега? - PullRequest
5 голосов
/ 27 июня 2011

Я использую php's preg_replace(), чтобы преобразовать любые слова, перед которыми стоит символ хэштега, в гиперссылки.

Итак, что-то вроде: #austin станет: <a href="/tag/austin">#austin</a>

Вот мое регулярное выражение.

preg_replace('/\B#(\w*[A-Za-z_]+\w*)/', '<a href="/tag/$1">$0</a>', $text);

Моя проблема: если есть какие-либо заглавные буквы, значение href сохранит их, но я хочу, чтобы значение href всегда былополностью строчные.

Ввод: #Austin
Не должен становиться: <a href="/tag/Austin">#Austin</a>
Он должен стать: <a href="/tag/austin">#Austin</a>

Как я мог изменить свое регулярное выражение для создания этихрезультаты?

Ответы [ 4 ]

5 голосов
/ 27 июня 2011

Вот пример использования preg_replace_callback в соответствии с предложением @faileN:

Демо-ссылка

$string = '#Austin';

function hashtag_to_link($matches)
{
  return '<a href="/tag/' . strtolower($matches[1]) . '">' . $matches[0] . '</a>';
}

echo preg_replace_callback('/\B#(\w*[a-z_]+\w*)/i', 'hashtag_to_link', $string);

// output: <a href="/tag/austin">#Austin</a>
3 голосов
/ 27 июня 2011

Попробуйте это:

preg_replace('/\B#(\w*[A-Za-z_]+\w*)/', '<a href="/tag/$1">$0</a>', strtolower($text));

Это заставит субъект ($text) быть в нижнем регистре до проверки регулярного выражения.

2 голосов
/ 27 июня 2011

Вы можете достичь этого с помощью preg_replace_callback: http://de2.php.net/manual/en/function.preg-replace-callback.php

1 голос
/ 27 июня 2011

Теоретически вы можете использовать модификатор e, который позволяет использовать функции PHP в строке замены:

preg_replace('/\B#(\w*[A-Za-z_]+\w*)/e', "'<a href=\"/tag/'.strtolower('$1').'\">$0</a>'", $text);
...