用于允许特定URL的正则表达式

时间:2014-09-09 15:28:49

标签: regex

正则表达式非常令人困惑,特别是对于长网址。这是一个检查URL并在$ msg变量中存储自定义消息的代码。在此示例中,它允许除facebook之外的所有URL。我需要做一些改变。

它应该允许所有网址,它不应该允许Facebook网址除了有视频的网址

if(some url website link){
        $msg = 'url allowed';
    }elseif(preg_match("|^http(s)?://(www.)?facebook.([a-z]+)/(.*)?$|i", $url)){
        $msg = 'url NOT allowed';
    }else{some other url test
}
应该允许

https://www.facebook.com/video.php?v=100000000000000。我如何编写正则表达式只允许facebook的视频网址而不允许facebook的其他网址。

我想为另外一个fb URL做这个 https://www.facebook.com/username/posts/100000000000000(应该允许)

谢谢

1 个答案:

答案 0 :(得分:2)

您可以使用以下正则表达式匹配非视频或状态更新的所有facebook.com网址:

  

^http(s)?://(www\.)?facebook.([a-z]+)/(?!(?:video\.php\?v=\d+|username/posts/\d+)).*$

<强>解释

^                    # Assert position at the beginning of the line
http(s)?://          # The protocol information
(www\.)?             # Match 'www.'
facebook\.           # Match 'facebook.'
([a-z]+)             # Match the TLD
/                    # A literal forward slash '/'
(?!                  # If not followed by:
 (?:                 # Start of non-capturing group
 video\.php\?v=\d+   #   a video URL
 |                   #   OR
 username/posts/\d+  #   a status update URL
 )                   # End of non-capturing group
)                    # End of negative lookahead
.*                   # Match everything until the end if above condition true
$                    # Assert position at the end of the line

RegEx Demo