【问题标题】:File names from two relative paths using regular expression使用正则表达式来自两个相对路径的文件名
【发布时间】:2013-12-09 00:21:12
【问题描述】:

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

<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+,但它与样式-宽度属性发生冲突,并且它还会从文本中的另一个相对路径中找到文件名。提前感谢您的帮助。

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

【问题讨论】:

  • 好的,你有几个相对路径,你只想匹配来自某些路径的某些文件名,对吧?那你说的是哪条路?

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


【解决方案1】:

试试看:

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

或者也许使用basename()

【讨论】:

  • 嗯,这是一个常见的错误,扩展名不仅限于字符,当然也不限于 3 或 4 个字符。例如,这是一个有效的名称my.tar.gz。在这种情况下,添加 ^$ 毫无意义。
【解决方案2】:

输入是 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"

【讨论】:

    猜你喜欢
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 2018-12-07
    • 1970-01-01
    相关资源
    最近更新 更多