[英]Regex to tell if a string contains a linux file path or if a linux file path as part of a string
我正在编写一个正则表达式,用于查看字符串是否包含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(和unix)字符是ascii nul字符\\0
(它不被允许,因为它被用作字符串终止符---在这种情况下是路径名终结符---在open( 2)系统调用,所以你总是只有一个,最后,不算作文件字符)。 旧的unices不允许将几个/
斜杠字符组合在一起,所以正确的正则表达式将是(\\/?[^\\0/])+|\\/
(一个可选的斜杠字符序列,后跟非空字符和非斜杠字符,或单独的/
entry - 表示根目录)允许除ascii nul之外的所有字符,并且不允许两个斜杠一起出现。 最近的实现允许对斜杠进行分组(将它们折叠成一个),因此有效路径regexp将是[^\\0]+
。
但是这匹配了你暴露的所有输入(即使它将所有输入都匹配为一个文件路径,因为\\n
允许字符作为文件名的一部分),所以你必须在你的问题中更精确地公开你想要什么,你不想接受什么。 "foo.log was written"
和"the file "
(带有最终空间)是linux(和unix)中的有效文件名。 其他控制角色怎么样? 那么转义序列,wildcar字符(比如*
或?
)等呢?
(/)+[a-zA-Z0-9\\\\-_/ ]*(.log)
要么
(/)+[a-zA-Z0-9\\\\-_/ ]*(.cpp)
用于匹配字符串中的c ++文件路径。 它可能有所帮助
对于绝对文件路径:
^(\/[\w^ ]+)+\/?([\w.])+[^.]$
对于绝对文件夹路径:
^(\/[\w^ ]+)+\/?$
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.