Задать вопрос
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);

Спасибо!
  • Вопрос задан
  • 3424 просмотра
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 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]
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽