Если есть "(.*?)" добавлять свою подстроку на PHP

9:56 13.06.2017
Мне как то потребовалось проверить есть ли что то в (.*?) и если есть выполнять определенное действие. Я это реализовал при помощи функции preg_replace_callback. Пример реализации:
$str = preg_replace_callback(
    '/srt(.*?)srt(.*?)/',
    function($match)
    {
        $a = $match[1];
        $b = !empty($match[2]) ? 'Своя подстрока' : null; // Если второй "(.*?)" есть, добавляем свою подстроку, в противном случае - переменная null

        return 'trs' . $a . 'trs' . $b;
    },
$str);

Таким образом делал замену локальных ссылок на ссылки с анкорами, для phpFox. Пример:
				$value = preg_replace_callback(
					'~(?<!=)' . $path . 'forum\/thread\/' . $id . '\/(page_[0-9]+\/)?(#?(post|view)_?[0-9]+\/?)?~is',
					function($match) use($path, $topic, $id)
					{
						$url    = $path . 'forum/thread/' . $id . '/';
						$anchor = $topic['title'];

						if (!empty($match[1]))
						{
							$param = trim($match[1], '/');
							$param = explode('_', $param);

							$anchor .= ' (' . Phpfox::getPhrase('pages.page') . ': #' . $param[1] . (!empty($match[2]) ? ' • ' : ')');
							$url    .= $param[0] . '_' . $param[1] . '/';
						}

						if (!empty($match[2]))
						{
							$param[0] = preg_replace('/[^a-z]/i', '', $match[2]);
							$param[1] = preg_replace('/[^0-9]/', '', $match[2]);

							$anchor .= (!empty($match[1]) ? null : ' (') . Phpfox::getPhrase('forum.message') . ': #' . $param[1] . ')';
							$url    .= $param[0] . '_' . $param[1] . '/';
						}

						return '[url=' . trim($url) . ']' . trim($anchor) . '[/url]';
					},
				$value);