Я плохо разбираюсь в регулярных выражениях, но если вы делаете это, просто заменяете внешние URL (т. Е. Не являетесь частью вашего сайта/приложения) внутренним URL-адресом, который будет отслеживать клики и перенаправлять пользователя, тогда должно быть легко создать регулярное выражение, которое будет соответствовать только внешним URL-адресам.
Итак, предположим, что ваш домен foo.com
, вам просто нужно создать регулярное выражение, которое будет соответствовать только гиперссылке, которая не содержит URL-адреса, начиная с http://foo.com
. Теперь, как я уже сказал, я очень плохо с регулярными выражениями, но вот мой лучший удар в нем:
$reg[0] = '`<a(\s[^>]*)href="(?!http://foo.com)([^"]*)"([^>]*)>`si';
Edit: Если вы хотите отслеживать клик-thrus для внутренних URL-адресов, а также, то просто замените http://foo.com
с URL-адресом вашей страницы перенаправления/отслеживания, например http://foo.com/out.php
.
Я рассмотрю примерный сценарий, чтобы показать, о чем я говорю.Скажем, у вас есть ниже бюллетень:
<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 хранится в базе данных и заменяется http://foo.com/out.php?id=1
,
На втором проходе поиска, скрипт будет исследовать:
<a href="http://foo.com/out.php?id=1">
Эта ссылка соответствует 1 и 3, но не 2. Таким образом, поиск будет переходить к следующей ссылке:
<a href="http://foo.com">
Эта ссылка удовлетворяет всем 3 компонентам регулярного выражения, поэтому URL-адрес хранится в базе данных и заменяется на http://foo.com/out.php?id=2
.
На третьем проходе поиска скрипт рассмотрит первые 2 (уже замененные) ссылки, пропустит их, а затем найдет соответствие с последней ссылкой в информационном бюллетене.
Как бы вы использовали preg_match сделать замену? –
К сожалению, забыл о том, что когда 1 писали мои 1-1 после того, как первоначально отредактирован свой пост, чтобы добавить потенциальный способ использования preg_match(), чтобы достичь того, чего вы хотите. Надеюсь, что это помогает. – hbw
Кроме того, 1 случайно сказал preg_match(), когда на самом деле имел в виду preg_match_all 1() - жаль, что это было время, так как 1've использовали эти функции. – hbw