2012-08-12 65 views
0

我一直在試圖想出一個正則表達式,將從給定文本過濾出所有有效的UNIX路徑,但不會匹配任何URL(如http://...正則表達式查找UNIX路徑,而不是網址

下面的路徑都是有效的:

/home/username/some_file.txt 
/home/username/some_file.longext 
"/path/to/file/some file.longext" 

但它不應該與任何這些:

http://www.somelink.com 
ftp://www.somelink.co.uk 
https://www.somelink.com and so on 

我想出了這一點,但它的所有URL匹配過,這是我很TR英濾除:

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

編輯: 我要提到的輸入文本實際內容是從裏面的URL,以及有效的UNIX路徑的文件,因此正則表達式需要能匹配任何路徑上的任何地方內除了匹配網址之外的文字。

+2

'[A-ZA-Z0-9]'是不夠的,符合UNIX路徑 - 你不能在POSIX路徑中使用的唯一字符是'/'和空字符。 – 2012-08-12 18:14:09

+0

答案在這裏:http://stackoverflow.com/questions/537772/what-is-the-most-correct-regular-expression-for-a-unix-file-path那麼你不希望找到是什麼這裏:http://tools.ietf.org/html/rfc3986#appendix-B所以你需要檢查第一件事,然後丟棄網址。 – N4553R 2012-08-12 18:15:30

+0

我也看看這個問題,但接受的正則表達式沒有爲給定文本我必須在 – strange 2012-08-12 18:25:35

回答

0

這似乎試圖在字符串的開頭匹配斜線簡單,假設你的路徑是絕對的,沒有必要檢查是否存在路徑,它是可讀或相似。它應該從^"?/開始。這將足以過濾URL。

+0

但是,這不匹配文件名中的空格,並且與此不匹配,例如: /Users/Me/Desktop/Path/SomeMore/Screen shot 2011 -03-15 at 20.38.21.png – strange 2012-08-12 18:24:43

+0

這是正則表達式的開始。 – Birei 2012-08-12 18:29:47

2

你應該知道,你拿出任何解決方案僅是一個啓發式的。

cd /tmp 
mkdir test 
cd test 
mkdir http: 
cd http: 
mkdir www.google.com 
cd www.google.com 
echo "I'm a file, not a web site" > 'search?q=Unix+path+syntax+double+slash' 
cd /tmp/test 

現在http://www.google.com/search?q=Unix+path+syntax+double+slash既是:一個URL和文件的路徑:

cat 'http://www.google.com/search?q=Unix+path+syntax+double+slash' 
w3m 'http://www.google.com/search?q=Unix+path+syntax+double+slash' 

知道什麼是一個路徑名,究竟是不是一個路徑名的唯一可靠的方法是通過上下文。 cat的一個參數是一個路徑名。 w3m的一個參數不是。在自由形式的文本中,沒有解析作者的母語,你就是猜測。

+0

實際上'w3m'的一個參數有時候是一個路徑名。它做了一些猜測。我在原始答案中使用了'wget'而不是'w3m',但Google禁止了'wget',所以我立即改變了它,並最終導致了這個混亂。 – 2012-08-12 19:42:26

+0

這是所有罰款的傢伙,我沒事啓發式,因爲我知道這個文件將日誌文件和他們不可能指的實際上是假冒的URL地址路徑名。我只需要正則表達式就可以區分這兩者。總之,我需要正則表達式來過濾掉任何以http/ftp/https等開頭的路徑。 – strange 2012-08-12 21:39:49