【发布时间】:2019-08-30 12:49:37
【问题描述】:
我正在编写一个正则表达式,用于查看字符串是否包含作为整个字符串的 linux 系统的文件路径或仅作为字符串的一部分的 linux 系统的文件路径。所以基本上当文件路径是整个字符串时我想要匹配,但是当文件路径只是字符串的一部分时我不想要匹配。例如,我希望以下字符串告诉我有匹配项
/home/user/Documents/foo.log
这个字符串不匹配
/home/user/Documents/foo.log was written
以及这个字符串不匹配
the file /home/user/Documents/foo.log was written
到目前为止,我唯一能想到的就是这个,
^(\/*)
这只是说好的,你有一个斜杠后跟一个字符,但我不确定还有什么可以让正则表达式按照我的意愿工作。有人对如何扩展我的正则表达式以使其匹配我想要做的事情有任何意见吗?
编辑
作为命名约定的一部分,空格不是允许的文件名的一部分。是的,用户可以放置一个空格,因为它是一个 linux 系统,但是那将是一个用户错误。
【问题讨论】:
-
任何字符串都是潜在有效的 Linux 文件路径。你到底想检查什么?
-
/home/user/Documents/foo.log was written是一个有效的 linux 路径名。 -
它不是字符串的一部分。因为程序将要么转换发送给程序的日志消息,要么从文件中读取以传输日志消息。所以我想要一种方法来破译它希望我读取文件并且文件名不是日志消息的一部分
-
@n.m.抱歉看了上面的评论
-
这很奇怪,因为 linux 有效路径是你想象的任何字符串,除了
\0之外的所有可能的字符。像[^\0]*这样的东西会起作用。如果您不想在文件名中允许空格,那没关系,但是 linux 确实接受带有空格、控制字符等的文件名。文件名的唯一无效字符是 NUL 字符(用于字符串终止)即使您尝试将/的序列一起禁止(如//file//a//b) linux 确实接受它们,将/组压缩为一个斜杠字符。这样文件路径也有效。