假设我有一个字符串,其中包含文件的 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/