0

我一直在尝试提出一个正则表达式,它会从给定文本中过滤掉所有有效的 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

我想出了这个,但它也匹配所有 URL,这是我试图过滤掉的东西:

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

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

4

2 回答 2

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'

了解什么是路径名和什么不是路径名的唯一可靠方法是通过上下文。to 的参数cat是路径名。一个论点w3m不是。在自由格式的文本中,不解析作者的母语,你在猜测。

于 2012-08-12T19:28:34.620 回答
0

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

于 2012-08-12T18:14:35.527 回答