Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 用于允许特定URL的正则表达式_Regex - Fatal编程技术网

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

Regex 用于允许特定URL的正则表达式,regex,Regex,正则表达式非常混乱,尤其是对于长URL。下面是检查URL并将自定义消息存储在$msg变量中的代码。在本例中,它允许除facebook之外的所有URL。我需要做些改变 它应该允许所有的url,除了有视频的那个,它不应该允许facebook的url if(some url website link){ $msg = 'url allowed'; }elseif(preg_match("|^http(s)?://(www.)?facebook.([a-z]+)/(.*)?$|i

正则表达式非常混乱,尤其是对于长URL。下面是检查URL并将自定义消息存储在$msg变量中的代码。在本例中,它允许除facebook之外的所有URL。我需要做些改变

它应该允许所有的url,除了有视频的那个,它不应该允许facebook的url

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
}
应该允许。如何编写只允许facebook视频URL而不允许facebook其他URL的正则表达式

我想这样做一个更多的fb网址太喜欢 (应该允许)


谢谢

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

^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

您不知道后一个url是否是视频,因此,您的问题甚至在想到一个有效的regex.facebook.com/video.php后跟一些随机字符串将是视频url之前就开始了。类似地,facebook.com后面跟着一些用户名,后面跟着帖子,后面跟着一些随机数字,这就是帖子的url。除了视频和帖子url,不允许使用其他facebook url。精彩信息。非常感谢。我需要通过这些来理解每一个参数。我会回到你身边。谢谢。看来情况正好相反。我假设这个表达式只允许视频和帖子,但它允许developers.facebook.com、/photo.php?fbid=1000000000000、/about、/help、/mobile、/badges、/directory、/careers、/policies、/policity.php、/legal、/privacy。。。几乎所有的东西。正则表达式只能用于接受视频和帖子吗?facebook.com或facebook.com/anything都是不允许的。只有/video.php?v=1000000000000和/someusername/posts/10000000000000应该是allowed@user3736026:是的,我就是这样做的。请参阅正则表达式上方的注释:“匹配所有不是视频或状态更新的facebook.com URL”。因此,为了只匹配视频和帖子,您需要:
如果(!preg_match('regex',$url)){…}
。注意否定
。不知道发生了什么。。。我又试了一遍正则表达式,有否定的,也没有否定的。。。。没有否定,(最初的解决方案)几乎所有的facebook URL都可以与视频和帖子一起使用。。。现在否定所有的URL是不允许的。我很确定我做得很好。。。我刚刚用您提供的且没有否定的reqex替换了问题中的reqex^http(s)?:/(www.)?facebook([a-z]+)/(.*)$。@user3736026:我不确定您做错了什么。如果您想要一个只允许视频URL和状态URL,而不允许其他内容的正则表达式,您可以使用以下内容:
^http(s)?:/(www\)?facebook。([a-z]+)/(?:video\.php\?v=\d+;username/posts/\d+)$