m0dE
@m0dE

Замена BBCode URL регулярным выражением

Добрый день! Есть такое регулярное выражение:
/\[url=(.*)\](.*)\[\/url\]/Usi
И замена по нему:
<a href="$1" target="_blank">$2</a>
Текст вида
[url=http://google.ru]Сайт гугл[/url]
будет обработан нормально, а как сделать, чтобы если вдруг в $2 пустое значение, то подставить $1
[url=http://google.ru][/url]
Отобразилось как:
<a href="http://google.ru" target="_blank">http://google.ru</a>


Возможно ли это сделать при помощи preg_replace, а то я сделал через preg_replace_callback на время:
$text = preg_replace_callback('/\[url=(.*)\](.*)\[\/url\]/Usi', function($match) {
                return '<a href="'.$match[1].'" target="_blank">'.(empty($match[2]) ? $match[1] : $match[2]).'</a>';
            }, $text);

Спасибо!
  • Вопрос задан
  • 3419 просмотров
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Что-то вроде
<a href="$1" target="_blank">($2 == '' ? $1 :  $2)</a>

Сделайте регулярку нежадной, иначе что будет, если я вставлю две ссылки подряд?
[url=http://google.ru]Сайт гугл[/url][url=http://yandex.ru]Сайт яндекс[/url]

И не забывайте про проверку исходных данных. Что будет, если передать строку
[url=http://google.ru]<script src="http://my.xackep.site/zlovred.js"></script>Сайт гугл[/url]
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы