通过REGEX从链接中删除“http://”

时间:2011-09-23 00:04:30

标签: php regex

我想要做的是删除这些自动生成链接的“http://”部分,下面是一个示例。

HTTP://google.com/search GC ...

以下是我在PHP中使用的正则表达式,用于从URL生成这些链接。

    $patterns_sp[5] = '~([\S]+)~';                          
    $replaces_sp[5] = '<a href=\1 target="_blank">\1<br/>';

    $patterns_sp[6] = '~(?<=\>)([\S]{1,25})[^\s]+~';        
    $replaces_sp[6] = '\1...</a><br/>';

在这样的URL上运行这些模式时:

http://www.google.com/search?gcx=c&ix=c1&sourceid=chrome&ie=UTF-8&q=regex

REGEX给了我:

   <a href="http://www.google.com/search?gcx=c&ix=c1&sourceid=chrome&ie=UTF-8&q=regex" target="_blank">http://google.com/search?gc...</a>

我被困的地方:

没有明显的理由说明我无法修改第四行代码,如下所示:

    $patterns_sp[6] = '~(?<=\>http\:\/\/)([\S]{1,25})[^\s]+~';  

然而,REGEX似乎仍然捕获地址的“http://”部分,因此列出了这些非常多余的列表。我剩下的就像第一个例子中一样。

2 个答案:

答案 0 :(得分:1)

替换...

$patterns_sp[5] = '~([\S]+)~';                          

...与...

$patterns_sp[5] = '~^(?:https?|ftp):([\S]+)~';

然后,您可以使用$1访问无协议版本,并使用$0访问整个链接。

或者,您可以使用类似......

之类的内容删除主要协议
preg_replace('/^(?:https?|ftp):/', '', $str);

答案 1 :(得分:1)

我建议编写自己的正则表达式,而是查看http://php.net/manual/en/function.parse-url.php

检索URL的组件,然后编写一个仅包含所需部件的新版本。