PHP Regex用于不同的URL

时间:2010-01-11 06:28:26

标签: php regex image youtube url

我正在尝试找出一种匹配3种不同网址类型的方法,它们是;

  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
  4. 注意,我不希望它们被解析,如果它们只是没有http或www。

    的domain.com

    我面临的问题是让所有三个 - 甚至两个一起工作, 我有一个自动链接的类,所以如果有一些http://或www。它将链接它,但是如果我放入一个图像,它会解析图像中URL的HTML,如:

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

    这是垃圾:(

    我还要扫描YouTube网址,然后将网址替换为嵌入代码,以便显示视频而不是网址。我提到了从URL中提取ID,但无法让替换工作。

    请注意,这正在处理textarea,例如评论字段,人们正在输入评论,以及为什么自动链接网址,解析图像和YouTube视频的HTML。

    数据通过SQL查询显示并回显$ comments ['message'],并使用一些str_replace内容来进行一些简单的格式化。

    任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

你走了:

(?: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

您可test the above RegExs @ Robular

要确定网址是否在不受欢迎的HTML标记内,我建议您使用DOM解析器。

另外,请查看以下相关问题: How to mimic StackOverflow Auto-Link Behavior


关于YouTube替代品,您可以执行以下操作:

echo preg_replace('~youtube\.com\/watch\?v=(\w+)~i', 'embed code $1', $comments['message']);