我正在编写一个正则表达式,用于查看字符串是否包含linux系统的文件路径作为整个字符串或linux系统的文件路径仅作为字符串的一部分。所以基本上当文件路径是整个字符串我想要匹配,但是当文件路径只是字符串的一部分我不想要匹配。例如,我希望以下字符串告诉我有匹配
/home/user/Documents/foo.log
此字符串不匹配
/home/user/Documents/foo.log was written
以及此字符串不匹配
the file /home/user/Documents/foo.log was written
到目前为止,我唯一能够提出的就是这个,
^(\/*)
只说好了你有一个斜杠后跟一个字符,但我不知道还有什么用来让正则表达式按照我的意愿工作。有没有人对如何扩展我的正则表达式有任何意见,以使其与我期望的相匹配?
修改
作为命名约定的一部分,空格不是允许的文件名的一部分。是的,用户可以放置一个空间,因为它是一个Linux系统,但那将是一个用户错误。
答案 0 :(得分:12)
答案 1 :(得分:1)
(/)+[a-zA-Z0-9\\-_/ ]*(.log)
或
(/)+[a-zA-Z0-9\\-_/ ]*(.cpp)
用于匹配字符串中的c ++文件路径。
可能有帮助
答案 2 :(得分:0)
文件路径中唯一不允许的linux(和unix)字符是ascii nul字符\0
(它不被允许,因为它被用作字符串终结符---在这种情况下是路径名终结符---在 open(2)系统调用中,所以最后只能有一个,不计算为文件字符)。旧的unices不允许将几个/
斜杠字符组合在一起,因此正确的正则表达式将是(\/?[^\0/])+|\/
(一个可选的斜杠字符序列,后跟非空字符和非斜杠字符,或{{1单独输入---表示根目录)允许所有字符但是ascii nul,并且不允许两个斜杠一起出现。最近的实现允许对斜杠进行分组(将它们折叠为一个),因此有效路径正则表达式为/
。
但是这匹配了你公开的所有输入(即使它将所有输入都匹配为一个文件路径,因为[^\0]+
字符是允许的文件名的一部分),所以你必须在你的问题中更准确地揭示你想要的东西以及你不想接受的东西。 \n
和"foo.log was written"
(带有最后的空格)是linux(和unix)中的有效文件名。其他控制角色怎么样?那么转义序列,wildcar字符(如"the file "
或*
)等等呢?
答案 3 :(得分:0)
对于绝对文件路径:
^(\/[\w^ ]+)+\/?([\w.])+[^.]$
对于绝对文件夹路径:
^(\/[\w^ ]+)+\/?$