多个域的 preg_replace 和数组

发布于 2024-10-02 11:18:18 字数 833 浏览 3 评论 0原文

我有一个像这样的数组:

$array =  array('domain1.com','domain2.net','domain3.org');

有什么方法可以仅将这些域替换为带有 preg_replace 的链接吗?

目前有这个小功能,但解析所有域:

                function insert_referer($text){
                    $text = preg_replace('#(script|about|applet|activex|chrome):#is', "\\1:", $text);
                    $ret = ' ' . $text;
                    $ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret);
                    $ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret);
                    $ret = substr($ret, 1);
                    return $ret;
                }         

i have an array like this:

$array =  array('domain1.com','domain2.net','domain3.org');

any way to replace only these domains into links with preg_replace?

currently have this little function, but parses all the domains:

                function insert_referer($text){
                    $text = preg_replace('#(script|about|applet|activex|chrome):#is', "\\1:", $text);
                    $ret = ' ' . $text;
                    $ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret);
                    $ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret);
                    $ret = substr($ret, 1);
                    return $ret;
                }         

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

七色彩虹 2024-10-09 11:18:18

这段代码做了你想要的:

$array = array('domain1.com','domain2.net','domain3.org');
$text = 'Some text including domain1.com/something and http://domain3.org';
echo preg_replace('/((?:https?:\/\/)?(?:' . implode('|', $array) . ')[-a-zA-Z0-9\._~:\/?#\[\]@\!\
amp;\'\(\)\*\+,;=]*)/', '\1', $text);
// Outputs:
// "Some text including <a href="domain1.com/something">domain1.com/something</a> and <a href="http://domain3.org">http://domain3.org</a>"

我没有测试代码本身,所以它可能(我不认为它会,但有可能)包含拼写错误,但我测试了正则表达式本身,它工作得很好。

This code does what you wanted:

$array = array('domain1.com','domain2.net','domain3.org');
$text = 'Some text including domain1.com/something and http://domain3.org';
echo preg_replace('/((?:https?:\/\/)?(?:' . implode('|', $array) . ')[-a-zA-Z0-9\._~:\/?#\[\]@\!\
\'\(\)\*\+,;=]*)/', '\1', $text);
// Outputs:
// "Some text including <a href="domain1.com/something">domain1.com/something</a> and <a href="http://domain3.org">http://domain3.org</a>"

I didn't test the code itself so it may (I don't think it would but it's possible) contain typos, but I tested the regexp itself and it works perfectly.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文