正则表达式找到unix路径而不是URL

时间:2012-08-12 18:08:59

标签: regex

我一直试图想出一个正则表达式,它会过滤掉给定文本中的所有有效Unix路径但不匹配任何URL(例如http://...

以下路径均有效:

/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

我想出了这个,但它也匹配所有网址,这是我想要过滤掉的东西:

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

编辑: 我应该提一下输入文本实际上是来自内部带有URL的文件的内容以及有效的Unix路径,因此正则表达式需要能够在文本内部的任何路径上匹配,而不是匹配的URL。

2 个答案:

答案 0 :(得分: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的参数不是。在自由格式的文本中,没有解析作者的母语,你猜测。

答案 1 :(得分:0)

尝试匹配字符串开头的斜杠似乎很简单,假设您的路径是绝对的,并且不需要检查路径是否存在,它是可读的还是类似的。它应该像^"?/一样开始。这将过滤掉URL。