使用正则表达式从两个相对路径中的文件名

时间:2013-11-24 10:07:18

标签: php regex preg-match relative-path filepath

我想使用正则表达式在文本中找到带扩展名的fileName。我有这样的文字:

<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属性发生冲突,它还从文本中的另一个相对路径中找到文件名。提前谢谢你的帮助。

补充说明: 我想找到位于两个相对路径中的文件名。我知道路径,但我不知道哪些文件存在。可能会有多次出现。

2 个答案:

答案 0 :(得分:1)

试一试:

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

或者可以使用basename()

答案 1 :(得分: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"