HTTP://google.com/search GC ...
$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/>';
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://”部分,因此列出了这些非常多余的列表。我剩下的就像第一个例子中一样。
答案 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的组件,然后编写一个仅包含所需部件的新版本。