Я использую php's preg_replace, чтобы преобразовать любые слова, которые имеют hashtags перед ним в ссылку.
Итак, что-то вроде #austin будет завернуто в <a href="/tag/austin">#austin</a>
Вот мое регулярное выражение.
preg_replace('/\B#(\w*[A-Za-z_]+\w*)/', '<a href="/tag/$1">$0</a>', $text);
Моя проблема в том, что есть ли какие-либо заглавные буквы, например «#Austin», ссылка будет отображаться как <a href="/tag/Austin">#Austin</a>
, вместо этого я хочу, чтобы url был строчным, независимо от того, что , поэтому <a href="/tag/austin">#Austin</a>
.
Как я могу изменить свой обычный экспресс, чтобы создать эти результаты?
Вот пример использования preg_replace_callback
предложенный @faileN:
<?php $string = '#Austin'; function hashtag_to_link($matches) { return '<a href="/tag/' . strtolower($matches[1]) . '">#' . $matches[1] . '</a>'; } echo preg_replace_callback('/\B#(\w*[a-z_]+\w*)/i', 'hashtag_to_link', $string);
Вы можете добиться этого с помощью preg_replace_callback
: http://de2.php.net/manual/en/function.preg-replace-callback.php
Попробуйте следующее: preg_replace ('/ \ B # (\ w * [A-Za-z _] + \ w *) /', '$ 0', strtolower ($ text)); Это заставит объект ($ text) быть в нижнем регистре до проверки регулярного выражения
Теоретически вы можете использовать e
модификатор, который позволяет вам использовать функции PHP в заменяющей строке:
preg_replace('/\B#(\w*[A-Za-z_]+\w*)/e', "'<a href=\"/tag/'.strtolower('$1').'\">$0</a>'", $text);