php - 在正则表达式中允许一些 url

标签 php regex preg-replace preg-match

我使用下面的正则表达式来隐藏网站 url,效果很好。

$message_text=preg_replace("/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)/", "<website hidden>", htmlspecialchars($message_text));

$message_text 将是一条长消息,其中包含许多 url 以及 facebook.com 或 gmail.com

现在我想允许一些 url,例如 facebook.com 或 google.com 或 http://gmail.com 我在修改这个表达式时遇到了麻烦。 请帮我解决这个问题 谢谢

最佳答案

我认为这对你有用:

<?php

    $message_text = "sdfhsdkklsdkjj www.facebook.com www.google.com http://gmail.com";
    echo $message_text = preg_replace_callback('/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)/', 
        function ($match) {

            $allowed = array("www.facebook.com", "www.google.com");
            if(!in_array($match[1], $allowed))
                return "&#60;website hidden&#62;";

            return $match[1];
        }, htmlspecialchars($message_text));

?>

输出:

sdfhsdkklsdkjj www.facebook.com www.google.com <website hidden>

关于php - 在正则表达式中允许一些 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27822455/

相关文章:

php - 将 'eregi_replace' 函数转换为 'preg_replace' 和 'mysql_num_rows' 参数修复

php - preg_replace() 模式删除 php 中的括号和内容

php - 如何使用 php 和 html 根据组合框选择的变化自动更改输入文本框的值

php - 漂亮的 URL 条件重写

c# - 亵渎正则表达式不起作用

javascript - 匹配最多 2 位小数的数字的正则表达式

php - 用php和mysql替换文本中的关键字

php - 在 PHP 中循环遍历 SQL 结果 - 没有得到整个数组

php - CodeIgniter 列表字段

java - (?i) 正则表达式结果 - "Nothing"被 Something 取代