正则表达式非常令人困惑,特别是对于长网址。这是一个检查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(应该允许)
谢谢
答案 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