Регулярные выражение. Негативный просмотр назад

Непонятно, с какой частью выражения связан негативынй просмотр назад. И почему тут не используется негативный просмотр вперед?

 preg_replace_callback(
      '{
        (?:
          (\w+://)          # протокол с двумя слэшами
          |                 # - или -
          www\.             # просто начинается на www
        )
        [\w-]+(\.[\w-]+)*   # имя хоста
        (?: : \d+)?         # порт (не обязателен)
        [^<>"\'()\[\]\s]*   # URI (но БЕЗ кавычек и скобок)
        (?:                 # последний символ должен быть...
            (?<! [[:punct:]] )  # НЕ пунктуацией
          | (?<= [-/&+*]     )  # но допустимо окончание на -/&+*
        )
      }xis',
      function ($p) {
        $name = htmlspecialchars($p[0]);
        $href = !empty($p[1])? $name : "http://$name";
        return "<a href=\"$href\">$name</a>";
      },
      $text
    );

Ответы (1 шт):

Автор решения: Mike

Просмотр назад связан с последующим, не указанным в выражении, элементом, возможно нулевой ширины. И служит что бы заглянуть назад внутрь пройденной строки и провести дополнительную проверку последнего символа, внутри хоста, порта или URI, смотря что будет присутствовать в строке.

А просмотр вперед не сработает. Скажем возьмем url http://abc.com:999/xxx.php? вопросительный знак в нем будет захвачен выражением URI. При этом негативный просмотр вперед будет пытаться убедиться, что после него нет например еще одного вопросительного знака. И он успешно с этим справится, в итоге, вопросительный знак не будет отрезан от URI

→ Ссылка