【问题标题】:PHP Regex for different URLs不同 URL 的 PHP 正则表达式
【发布时间】:2011-01-03 15:50:56
【问题描述】:

我正在尝试找出一种方法来匹配 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

注意,如果它们只是没有 http 或 www 的 domain.com,我不希望它们被解析。

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

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

这是垃圾:(

我还想扫描 YouTube 网址,然后将网址替换为嵌入代码,以便显示视频而不是网址。我已经从 URL 中提取了 ID,但无法进行替换。

请注意,这是一个文本区域,如评论字段,人们在其中输入 cmets,因此自动链接 URL、解析图像和 YouTube 视频的 HTML 会很好。

数据通过 SQL 查询显示并回显 $cmets['message'],并带有一些 str_replace 内容以进行一些简单的格式化。

任何帮助将不胜感激。

【问题讨论】:

    标签: php regex image youtube url


    【解决方案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

    要确定 URL 是否在不需要的 HTML 标记中,我建议您使用 DOM 解析器。

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


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

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

    【讨论】:

    • 这很简单。无论如何+1正确编译它:-P
    猜你喜欢
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 2010-09-17
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多