比方說,我有一個包含Unix風格的本地文件路徑類似於下面的示例的字符串:如何從字符串中提取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]+
它爲這些測試用例做了工作。
現在,我的擔心是,這可能拉出不是文件路徑的其他文本,只看起來像一個,因爲它在正確的位置有斜槓和點。
有沒有更好的方法來處理這個問題(甚至可能不使用正則表達式)?
我不明白你怎麼能夠寫出一些能區分實際文件路徑和某些只是看起來像文件路徑的東西。除非您還能夠將這些路徑驗證爲現有文件的實際路徑。如果有人寫道「在Stackoverflow上,你可以向上/向下投票答案」。 「上/下」可以是一個文件路徑,沒有某種上下文感知或人工智能就無法知道。 – johusman 2011-02-26 13:25:03
@ johusman:的確如此。我目前的正則表達式不會提取「上/下」,只是因爲它沒有文件擴展名。既然,一個文件確實不需要擴展名,這不是一個好的理由。 – 2011-02-26 13:29:56
術語「擴展名」是特定於DOS/Windows的,它確實是文件名的特殊部分。在類Unix系統中,它只是一個文件名的一部分,恰好與其餘部分相隔一點。所以你完全在這裏,這不會有幫助。 – 2011-02-26 13:36:46