- Отже частина 2 - "Регулярні вирази"
- Тепер ми знаємо що шукати ...
- збираємо регулярку
- Розберемо по порядку (<a [az \ -_ \ s \ "\ # \ =] *)
- Регулярний вираз для пошуку активних посилань.
- код
- Як використовувати даний код:
- Розглянемо приклад:
Перша частина уроку: Редирект або як закрити зовнішні посилання від індексації .
Привіт, в першій частині уроку ми створили файл exit.php в якому зробили редирект, але щоб кожен раз в ручну не підставляти до заслання "exit.php? Url =" ми створимо регулярний вираз за допомогою якого автоматично знайдемо всі зовнішні посилання і замінимо їх на внутрішні.
Отже частина 2 - "Регулярні вирази"
Для початку треба визначитися, що будемо шукати за допомогою регулярки. А шукати будемо всі активні посилання починаються на HTTP: //, HTTPS: // або FTP: //. Корисні функції на PHP - активне посилання, по якій можна клікнути. Тепер давайте розберемо з чого складається html код такого посилання.
На малюнку видно що будь-яка активна посилання складається з тега <a і атрибута href = "", а інші атрибути, такі як: id, class, title і т.д використовуються не завжди, і можуть бути як перед атрибутом href = "", так і після нього.
Тепер ми знаємо що шукати ...
Наше завдання вказати регулярному виразу, щоб воно шукало: тег <a, потім будь-який текст з використанням символів (_ - = ") - цей текст може бути, а може і не бути, потім обов'язково шукаємо href =" (а тут треба знайти HTTP : //, HTTPS: // або FTP: //) і все. Тим самим ми будемо знати, що це активна зовнішня посилання.
збираємо регулярку
Знайдемо тег <a і те, що можеть бути до атрибута href = "" (class = "" id = "" і т.д).
Розберемо по порядку (<a [az \ -_ \ s \ "\ # \ =] *)
- () - все що знаходиться в круглих дужках - це група
- <A - тут ми говоримо про те, що потрібно шукати збіг символів <a
- [] - квадратні дужки говорять про діапазон, тобто [Abc] - буде означати або а, або b або з
- [A-z _ "\ - \ s \ =] * - рядок може містити символи в діапазоні від a до z, _, лапки, тире, знак одно і \ s - пробіл. А * зірочка після квадратних дужок говорить про те, що дані символи можуть зустрітися нуль і більше разів.
Потім шукаємо href = "
А після потрібно вказати, що протокол може бути: або HTTP або HTTPS або FTP.
Тут теж все просто, вказуємо в дужках (https | ftp). символ | - означає "або", тобто або https або ftp. А після букви s (http S) ставимо знак питання - це скаже про те, що буква S може бути 1 раз, або її може зовсім не бути. А після протоколу ставимо: //
Регулярний вираз для пошуку активних посилань.
код
$ RegV = '# (<a [az \ -_ \ s \ "\ # \ =] *) (href =") ((https? | Ftp): //) #i';
Буква i в кінці регулярки говорить про те, що пошук буде регістронезавісімого, тобто рядок "АБВГД" нічим не буде відрізнятися від "абвгд".
Як використовувати даний код:
Використовувати ми його будемо з функцією preg_replace ().
У цієї функції є три параметра:
- Регулярний вираз
- На що міняємо
- Те що міняємо
Розглянемо приклад:
$ RegV = '# (<a [az \ -_ \ s \ "\ # \ =] *) (href =") ((https? | Ftp): //) #i'; // регулярний вираз $ replace = '$ 1 $ 2exit.php? Url = $ 3'; // то на що заміняємо $ text = 'Подивіться приклад <a href="http://www.makannikov.ru/blog.php"> тут </a>'; // текст (те що замінюємо) // В змінну $ text, ви підставляєте свій текст в якому хочете замінити посилання echo preg_replace ($ regV, $ replace, $ text); // Результатом виконання даної функції буде: // Подивіться приклад тут // Перед http ми підставили exit.php? Url =
Пояснюю що означає $ 1, $ 2 і $ 3 - це групи, для позначення груп в регулярке, ми використовували круглі скобочки.
- $ 1 - група №1 (<a [az \ -_ \ s \ "\ # \ =] *)
- $ 2 - група №2 (href = ")
- $ 3 - група №3 ((https? | Ftp): //)
- $ 4 - група №4 (https? | Ftp) - вона знаходиться всередині третьої групи
На цьому я завершую даний урок, про те як створити сторінку exit.php. дивіться тут
Php?Https?
Https?
Php?
Php?
Https?
Https?