首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Preg用域过滤器替换链接的文本

Preg用域过滤器替换链接的文本
EN

Stack Overflow用户
提问于 2012-05-16 08:43:52
回答 2查看 264关注 0票数 0

大家好,我有一个问题,我有一条短信

代码语言:javascript
运行
复制
$text = " some and text http://www.somelink2.com/html5.jpg and some text http://www.somelink.net/test/testjava/html5.html#fbid=QTb-X6fv5p1 some http://www.somelink4.org test and http://www.somelink3.org/link.html text and some text ";

我需要转换所有的文本链接http/s除域名somelink3.org,somelink2.com他们必须是纯文本

类似这样的东西,但带有域过滤器而不是扩展图像:

代码语言:javascript
运行
复制
function livelinked ($text){
        preg_match_all("#((http|https|ftp)://(\S*?\.\S*?))(\s|\;|\)|\]|\[|\{|\}|,|\"|'|:|\<|$|\.\s)|^(jpg)^#ie", $text, $ccs);
        foreach ($ccs[3] as $cc) {
           if (strpos($cc,"jpg")==false  && strpos($cc,"gif")==false && strpos($cc,"png")==false ) {
              $old[] = "http://".$cc;
              $new[] = '<a href="http://'.$cc.'" target="_blank">'.$cc.'</a>';
           }
        }
        return str_replace($old,$new,$text);
}

编辑:这对我有帮助:

代码语言:javascript
运行
复制
$text =  preg_replace("~((?:http|https|ftp)://(?!site.com|site2.com|site3.com)(?:\S*?\.\S*?))(?=\s|\;|\)|\]|\[|\{|\}|,|\"|'|:|\<|$|\.\s)~i",'<a href="$1" target="_blank">$1</a>',$text);  
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-16 09:08:00

在这种情况下,您可以使用(?!...) negative lookahead assertion。只需紧跟在协议占位符://后面添加(?!somelink3.org|somelink2.com)即可。

代码语言:javascript
运行
复制
 #((http|https|ftp)://(?!domain1|domain2)(\S*?\.\S*?))....

此外,您不应该将preg_match_all与笨拙的str_replace结合使用作为次要步骤。取而代之的是利用preg_replace_callback并将所有逻辑放在一个函数中。

票数 1
EN

Stack Overflow用户

发布于 2012-05-16 09:45:14

您可能可以将其压缩并使用preg全部替换

原始正则表达式

代码语言:javascript
运行
复制
(?:http|https|ftp)://
(\S*?\.(?:(?!(?<=\.)(?:jpg|png|gif)|\s).)*?)
(?= [\s;)\]\[{},"':<] | $ | \.\s )

原始替换

代码语言:javascript
运行
复制
<a href="http://$1" target="_blank">$1</a>

修饰符//xsg

编辑:-所以我没有抓到你需要过滤域名。上面的regex过滤jpg/png/gif文件,这是相当复杂的。但是添加过滤器可能更好地使用url解析器或回调中的另一个正则表达式来处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10610670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档