java - 如何从字符串中提取 Unix 风格的本地文件路径?

标签 java regex filepath

假设我有一个字符串,其中包含文件的 Unix 风格本地路径,如下例所示:

 String s1 = "something something ./files/icon.gif";
 String s2 = "The files are texts/text1.txt and texts/text2.txt";
 String s3 = "<img src="images/img/run.png" alt="" />"

所以,我只需要提取文件路径:

 "./files/icon.gif"
 "texts/text1.txt", "texts/text2.txt"
 "images/img/run.png"

我提出了以下正则表达式:

\.?[[a-zA-Z0-9]*/]+\.[a-zA-Z0-9]+

它完成了这些测试用例的工作。

现在,我担心的是这可能拉出不是文件路径的其他文本,并且看起来只是一个,因为它在正确的位置有斜杠和点。

有没有更好的方法来处理这个问题(甚至可能不使用正则表达式)?

最佳答案

你做不到。 Unix 文件名实际上可以包含除 NUL 和 / 之外的任何内容,因此任何没有嵌入 NUL 的字符串都是有效路径。见:

[alqualos@brededor tmp]$ mkdir -p 'String s1 = "something something ./files/icon.gif";'
[alqualos@brededor tmp]$ ll -d String*
drwxr-xr-x 3 alqualos alqualos   4096 2011-02-26 16:31 String s1 = "something something .
[alqualos@brededor tmp]$ ll String\ s1\ \=\ \"something\ something\ ./
total 4K
drwxr-xr-x 3 alqualos alqualos 4096 2011-02-26 16:31 files
[alqualos@brededor tmp]$ ll String\ s1\ \=\ \"something\ something\ ./files/
total 4K
drwxr-xr-x 2 alqualos alqualos 4096 2011-02-26 16:31 icon.gif";

所以你所有的字符串都是有效的文件路径。如果你想提取所有看起来像“合理”路径的东西,那么你必须首先定义“合理”,即使这样你也可能会因为源文本中的“TCP/IP”之类的东西而失败。

关于java - 如何从字符串中提取 Unix 风格的本地文件路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5127119/

相关文章:

java - 如何为这种情况编写正则表达式?

javascript - 使用 iframe 从字符串中获取 src 和其他文本

python - 如何从已执行但未在其中声明的函数中获取模块的文件路径?

java - 什么是 Xuggler 的好替代品,因为它的开发已经停止?

java - 绑定(bind)到操作/结果的方法中的 "allowed"是什么

c# - 正则表达式查找字符串中出现的第一个大写字母

来自文件路径的 Java JTree 目录结构

c++ - 抑制 wxFileName::Normalize 错误消息

java - 在 Java 中搜索和替换 DOM 元素

java - Apollo 客户端无法连接到 GraphQL 服务器(http 调用执行失败)