如果网址包含某个目录,则返回网址末尾

时间:2018-08-21 20:09:34

标签: php regex

我需要通过一个sql文件搜索并找到该URL包含/assets/的文件名(URL的结尾)

示例网址:

https://www.example.com/assets/screenshots/this-is-an-example/2016-12-20_15-42-29.png

其中包含/assets/,所以我想获取网址的最后一部分,即:

2016-12-20_15-42-29.png

另一个例子:

https://www.example.com/images/screenshots/this-is-an-example/2016-12-20_15-42-29.png

什么也不会返回,因为找不到/assets/

*深入的目录数将有所不同,因此可能是/assets/dir1/dir2/filename.jpg,下一个可能是/assets/dir1/dir2/dir3/dir4/filename.jpg

希望这可以使用正则表达式来完成。

3 个答案:

答案 0 :(得分:1)

如概述所示,basename()将是解决此问题的好方法。

但是,如果您喜欢这种方式(或需要将其应用于某种防火墙模式字段),则可以使用正则表达式:

@^.*?/assets/.*?/([^/]+\.\w{3})$@

(请注意,定界符@会导致模式包含很多/-您可以坚持使用/作为定界符,但随后必须转义每个{{1} })。

https://regex101.com/r/wKhMAk/1

答案 1 :(得分:1)

尝试一下:

<!DOCTYPE html> <html lang="en-US"> <head> <meta charset="utf-8"> </head> <body> <div id="result"></div> </body> </html> <script> if (typeof (EventSource) !== undefined) { document.getElementById("result").innerHTML += "SSE supported" + "<br>"; } else { document.getElementById("result").innerHTML += "SSE NOT supported" + "<br>"; } var source = new EventSource("http://localhost:32123/"); source.onopen = function () { document.getElementById("result").innerHTML += "open" + "<br>"; }; source.onerror = function () { document.getElementById("result").innerHTML += "error" + "<br>"; }; source.onmessage = function (event) { document.getElementById("result").innerHTML += event.data + "<br>"; }; </script> 将检查URL中是否存在搜索字符串 / assets /

如果确实存在,它将从提供的var net = new brain.recurrent.LSTMTimeStep(); net.train([ [1, 3], [2, 2], [3, 1], ]); var output = net.run([[1, 3], [2, 2]]); // [3, 1] 中的URL返回搜索字符串的位置。 如果不是,它将返回false。

在这里,我使用三元运算符(if else语句的缩写)来评估条件。如上所述,如果搜索字符串存在,它将通过函数strpos()返回路径($url)的文件名,否则,如果找不到搜索字符串,则返回空。

$url

答案 2 :(得分:1)

您可以使用以下正则表达式:

^(?=.*\/assets\/).*\/\K.*$
  • ^声明字符串开头的位置。
  • (?=.*\/assets\/)正向查找,以确保字符串中包含/assets/子字符串。
  • .*贪婪地匹配任何东西。
  • \/匹配最后一个/
  • \K重置运算符,重置匹配。
  • .*$匹配所有内容,直到字符串$的结尾。

您可以here试试。


Php片段:

<?php

$url = 'https://w...content-available-to-author-only...e.com/assets/screenshots/this-is-an-example/2016-12-20_15-42-29.png';
preg_match('/^(?=.*\/assets\/).*\/\K.*$/',$url,$matches);

print_r($matches[0]);

打印:

2016-12-20_15-42-29.png

您可以here试试。