PHP Regex для разных URL - PullRequest
       29

PHP Regex для разных URL

1 голос
/ 11 января 2010

Я пытаюсь найти способ сопоставления с 3 различными типами URL:

  1. http://(www.)domain.com или www.domain.com
  2. http://(www.)domain.com/image.jpg/.png/gif или www.domain.com/image.jpg/.png/.gif
  3. http://(www.)youtube.com/watch?v=Li1zXaEYol8 или www.youtube.com/watch?v=Li1zXaEYol8

Примечание. Я не хочу, чтобы они анализировались, еслиэто просто domain.com без http или www.

Проблема, с которой я сталкиваюсь, заключается в том, чтобы заставить все три или даже два работать вместе, у меня есть класс, который выполняет автоматическое связывание, так что если есть что-то сhttp: // или www.он свяжет его, но затем, если я добавлю изображение, он анализирует HTML-код URL в изображении, например:

<img src="<a href="www.domain.com">domain.com</a>" />

, что является мусором: (

Я также хотел бысканировать URL-адреса YouTube, а затем заменить URL-адрес на код для встраивания, чтобы вместо URL отображалось видео. Я дошел до извлечения идентификатора из URL-адреса, но не смог получить замену.

Обратите внимание, что это работает с текстовой областью, например с полем комментариев, где люди вводят комментарии, и, следовательно, почему было бы полезно автоматически связывать URL-адреса, анализировать HTML для изображений и видео YouTube.

Данныеотображается через SQL-запрос и выводит $ comments ['message'] с некоторыми элементами str_replace для простого форматирования.

Любая помощь приветствуется.

1 Ответ

1 голос
/ 11 января 2010

Вот, пожалуйста:

(?:http:\/\/www\.|http:\/\/|www\.)(?:youtube\.com\/watch\?v=(?:\w+)|domain\.com\/image.(?:jpg|png|gif)|domain\.com)

Или с разделителями:

~(?:http:\/\/www\.|http:\/\/|www\.)(?:youtube\.com\/watch\?v=(?:\w+)|domain\.com\/image.(?:jpg|png|gif)|domain\.com)~i

Вы можете проверить вышеуказанные RegExs @ Robular .

Чтобы выяснить, находятся ли URL-адреса внутри нежелательных тегов HTML, я предлагаю вам использовать синтаксический анализатор DOM.

Кроме того, проверьте этот связанный вопрос: Как имитировать поведение автоматической связи со стеком .


Что касается замены YouTube, вы можете сделать что-то вроде этого:

echo preg_replace('~youtube\.com\/watch\?v=(\w+)~i', 'embed code $1', $comments['message']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...