Я не очень хорошо разбираюсь в регулярных выражениях, но если вы просто заменяете внешние URL-адреса (т. Е. Не являетесь частью вашего сайта / приложения) внутренним URL-адресом, который будет отслеживать клики и перенаправлять пользователя, тогда должно быть легко создать регулярное выражение, которое будет соответствовать только внешним URL-адресам.
Итак, скажем, ваш домен foo.com
, тогда вам просто нужно создать регулярное выражение, которое будет соответствовать только гиперссылке, которая не содержит URL, начинающийся с <a href="http://foo.com" rel="nofollow noreferrer">http://foo.com</a>
. Теперь, как я уже сказал, я довольно плохо с регулярными выражениями, но вот мой лучший удар в этом:
$reg[0] = '`<a(\s[^>]*)href="(?!http://foo.com)([^"]*)"([^>]*)>`si';
Edit:
Если вы хотите также отслеживать переходы по внутренним URL-адресам, просто замените <a href="http://foo.com" rel="nofollow noreferrer">http://foo.com</a>
URL-адресом страницы перенаправления / отслеживания, например, <a href="http://foo.com/out.php" rel="nofollow noreferrer">http://foo.com/out.php</a>
.
Я пройду пример сценария, чтобы показать, о чем я говорю. Допустим, у вас есть рассылка ниже:
<h1>Newsletter Name</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec lobortis,
ligula <a href="http://bar.com">sed sollicitudin</a> dignissim, lacus dolor
suscipit sapien, <a href="http://foo.com">eget auctor</a> ipsum ligula
non tortor. Quisque sagittis sodales elit. Mauris dictum blandit lacus.
Mauris consequat <a href="http://last.fm">laoreet lacus</a>.</p>
Для целей этого упражнения шаблон поиска будет:
// Only match links that don't begin with: http://foo.com/out.php
`<a(\s[^>]*)href="(?!http://foo.com/out\.php)([^"]*)"([^>]*)>`si
Это регулярное выражение можно разбить на 3 части:
<a(\s[^>]*)href="
(?!http://foo.com/out\.php)([^"]*)
"([^>]*)>
При первом проходе поиска скрипт проверит:
<a href="http://bar.com">
Эта ссылка удовлетворяет всем 3 компонентам регулярного выражения, поэтому URL хранится в базе данных и заменяется на <a href="http://foo.com/out.php?id=1" rel="nofollow noreferrer">http://foo.com/out.php?id=1</a>
.
На втором проходе поиска скрипт проверит:
<a href="http://foo.com/out.php?id=1">
Эта ссылка соответствует 1 и 3, но не 2. Таким образом, поиск переходит к следующей ссылке:
<a href="http://foo.com">
Эта ссылка удовлетворяет всем 3 компонентам регулярного выражения, поэтому URL хранится в базе данных и заменяется на <a href="http://foo.com/out.php?id=2" rel="nofollow noreferrer">http://foo.com/out.php?id=2</a>
.
На 3-м проходе поиска сценарий проверит первые 2 (уже замененные) ссылки, пропустит их, а затем найдет совпадение с последней ссылкой в бюллетене.