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

时间:2015-01-07 15:13:26

标签: php regex preg-replace preg-match

我正在使用正则表达式下面隐藏网站网址并且它工作得很好。

$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将是一条长消息,其中包含许多网址以及facebook.com或gmail.com

现在我想允许一些网址如facebook.com或google.com或http://gmail.com 我很难修改这个表达式。 请帮我解决这个问题 谢谢

1 个答案:

答案 0 :(得分:3)

我认为这应该适合你:

<?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>