2013-11-24 40 views
0

我想使用正則表達式在文本中找到帶擴展名的文件名。我的文字是這樣的:使用正則表達式的兩個相對路徑的文件名

<p>Some text<a href="/relativePath1/file.ext">link</a>.<p>SomeText<img 
src="/relativePath2/file2.ext" style="width: 200.2px; height: 1141px;"></p> 

我知道有兩個相對路徑,我想提取文件名,即位於此相對路徑目錄下。我不想從其他相對路徑或絕對路徑獲取文件。這些路徑可能會有更多的發生。擴展可能會有所不同。

我試過這個[\w-]+\.\w+,但它與style-width屬性發生衝突,它也從文本中的另一個相對路徑中找到文件名。感謝您的幫助,提前。

附加說明: 我想找到位於兩個相對路徑的文件名。我知道路徑,但我不知道哪些文件在那裏。可以有多個出現。

+0

OK ,你有幾個親戚路徑,你只是想匹配某些路徑中的某些文件名,對吧?那麼你在談論哪條路? – HamZa

回答

1

試試:

'/^[a-zA-Z0-9]+\.[a-zA-Z]{3,4}$/'  

也許使用basename()

+0

那麼這是一個常見的錯誤,擴展不僅限於字符,它們當然不限於3或4個字符。例如,這是一個有效的名字'my.tar.gz'。在這種情況下添加'^ $'是沒有意義的。 – HamZa

0

輸入是HTML,所以我會建議一個DOM的解決方案:

$html = <<<EOF 
<p>Some text<a href="/relativePath1/file.ext">link</a>.<p>SomeText<img 
src="/relativePath2/file2.ext" style="width: 200.2px; height: 1141px;"></p> 
EOF; 

$doc = new DOMDocument(); 
$doc->loadHTML($html); 

$selector = new DOMXPath($doc); 

// select all src and href attributes 
foreach($selector->query('//@href | //@src') as $url) { 
    // extract the filename from path using basename() 
    var_dump(basename($url->nodeValue)); 
} 

輸出:

string(8) "file.ext" 
string(9) "file2.ext" 
相關問題