Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.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
Javascript 如何匹配url中以querystring结尾的文件扩展名?_Javascript_Php_Regex - Fatal编程技术网

Javascript 如何匹配url中以querystring结尾的文件扩展名?

Javascript 如何匹配url中以querystring结尾的文件扩展名?,javascript,php,regex,Javascript,Php,Regex,我只想将以下所有URL中的文件扩展名匹配到问号。所以URL#4将匹配“file.pdf”中的pdf,而不是“otherfile.exe”中的“exe” 我该怎么做 我试过这个,但不起作用: ([^\.]+)(\?|[^\?]$)+ 这将是我将使用的版本 /\w+\.[A-Za-z]{3,4}(?=\?|$)/ 以下是一个工作版本: 使用“向前看”与其中之一?或者字符串的结尾(?=\?|$)然后可以匹配它后面的内容 $re = "/\\w+\\.[A-Za-z]{3,4}(?=\\?|$)/

我只想将以下所有URL中的文件扩展名匹配到问号。所以URL#4将匹配“file.pdf”中的pdf,而不是“otherfile.exe”中的“exe”

我该怎么做

我试过这个,但不起作用:

([^\.]+)(\?|[^\?]$)+

这将是我将使用的版本

/\w+\.[A-Za-z]{3,4}(?=\?|$)/
以下是一个工作版本:

使用“向前看”与其中之一?或者字符串的结尾
(?=\?|$)
然后可以匹配它后面的内容

$re = "/\\w+\\.[A-Za-z]{3,4}(?=\\?|$)/"; 
$str = "http://www.someplace.com/directory/file.pdf?other=true&more=false&value=otherfile.exe\n\n"; 

preg_match($re, $str, $matches);

这将是我将使用的版本

/\w+\.[A-Za-z]{3,4}(?=\?|$)/
以下是一个工作版本:

使用“向前看”与其中之一?或者字符串的结尾
(?=\?|$)
然后可以匹配它后面的内容

$re = "/\\w+\\.[A-Za-z]{3,4}(?=\\?|$)/"; 
$str = "http://www.someplace.com/directory/file.pdf?other=true&more=false&value=otherfile.exe\n\n"; 

preg_match($re, $str, $matches);

要匹配,请尝试此不区分大小写的函数:

function matchURLs($desiredURL, $compareURL){
  $url = parse_url($compareURL);
  if(preg_match('/^'$url['scheme'].'://'.$url['host'].$url['path'].'$/i', $desiredURL)){
    return true;
  }
  return false;
}
matchURLs('http://www.someplace.com/directory/file.pdf', 'http://www.someplace.com/directory/file.exe'); // false
matchURLs('http://www.someplace.com/directory/file.pdf', 'http://www.someplace.com/directory/file.pdf?value=file.exe'); // true
要在
之前获取以下信息:

function URL_before_query($url){
  $u = parse_url($url);
  return $u['scheme'].'://'.$u['host'].$u['path'];
}
echo URL_before_query('http://www.someplace.com/directory/file.pdf?other=true&more=false&value=otherfile.exe'); // http://www.someplace.com/directory/file.pdf

要匹配,请尝试此不区分大小写的函数:

function matchURLs($desiredURL, $compareURL){
  $url = parse_url($compareURL);
  if(preg_match('/^'$url['scheme'].'://'.$url['host'].$url['path'].'$/i', $desiredURL)){
    return true;
  }
  return false;
}
matchURLs('http://www.someplace.com/directory/file.pdf', 'http://www.someplace.com/directory/file.exe'); // false
matchURLs('http://www.someplace.com/directory/file.pdf', 'http://www.someplace.com/directory/file.pdf?value=file.exe'); // true
要在
之前获取以下信息:

function URL_before_query($url){
  $u = parse_url($url);
  return $u['scheme'].'://'.$u['host'].$u['path'];
}
echo URL_before_query('http://www.someplace.com/directory/file.pdf?other=true&more=false&value=otherfile.exe'); // http://www.someplace.com/directory/file.pdf

您是否尝试过使用PHP的
parse_url()
?我不确定您是否只想知道是否存在匹配项,或者是否需要字符串中的主机和路径。请指定。您是否尝试过使用PHP的
parse_url()
?我不确定您是否只想知道是否存在匹配项,或者是否需要字符串中的主机和路径。请指定。遗憾的是,它与本例中“.”中的过早匹配:
http://www.com.com/something/sampson.masterplan.pdf?sdf
它将与“masterplan.pdf”相匹配。有办法解决这个问题吗?(另外,我添加了
0-9
,这样它就可以匹配mp3)我将它稍微更改为:
/\w+\([A-Za-z0-9]{3,4})(?=\?|$)/
,不幸的是,它从一个“.”开始就匹配了。在这种情况下:
http://www.com.com/something/sampson.masterplan.pdf?sdf
它将与“masterplan.pdf”相匹配。有办法解决这个问题吗?(另外,我添加了
0-9
,这样它就可以匹配mp3了)我将它稍微修改为:
/\w+\([A-Za-z0-9]{3,4})(?=\?|$)/