簡體   English   中英

如何使用正則表達式從絕對路徑中提取文件名

[英]How to extract a filename using regex from an absolute path

我正在嘗試從以下行中提取文件名:

"GET /mapitzend/public/components/font-awesome/css/font-awesome.css HTTP/1.1" 200 26651

在這種情況下,預期的結果應該是“ font-awesome.css”。

\"(.[^\"]+)\s+HTTP

上面的正則表達式將返回:“ GET /mapitzend/public/components/font-awesome/css/font-awesome.css HTTP

我在這里想念什么..

試試這個正則表達式:

(?<=\\/)[^\\s\\/]*(?=\\s*HTTP)

點擊演示

說明:

  • (?<=\\/) -向后尋找正號,以找到緊跟/的位置
  • [^\\s\\/]* -匹配0+次出現的既不是空格字符也不是/的任何字符
  • (?=\\s*HTTP) -要匹配的正向超前,直到位置緊跟着0+空格和HTTP

雖然可以使用regex提取文件名,但是開始使用regex提取路徑然后使用basename()pathinfo()獲取文件名更容易:

$line = '"GET /mapitzend/public/components/font-awesome/css/font-awesome.css HTTP/1.1" 200 26651';

$m = array();
if (preg_match('/GET (.*) HTTP/', $line, $m)) {
    $filename = basename($m[1]);
}

僅使用regex

if (preg_match('#GET /(.*/)*(.*) HTTP#', $line, $m)) {
    $filename = $m[2];
}

使用擴展名為.css.html的文件名的屬性,可以使用以下正則表達式。

正則表達式: [^\\/]+?\\.[az]+

說明:

[^\\/]+? 匹配前一個字符為/的字符串。

\\.[az]+與擴展名匹配,以確保它是文件。

Regex101演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM