不要匹配字符串开头的点

时间:2016-05-30 07:34:53

标签: ruby-on-rails regex

我有一条像Folder1/File.png这样的字符串形式的路径 但是在这个字符串中,有时如果文件被隐藏或文件夹被隐藏,我不希望它被我的正则表达式匹配。

regex = %r{([a-zA-Z0-9_ -]*)\/[^.]+$}

input_path = "Folder_1/.file" # This shouldn't be matched.
input_path = "Folder/file.png" # This should be matched.

但我的正则表达式适用于第一个输入,但它甚至不匹配第二个输入。

3 个答案:

答案 0 :(得分:4)

您目前正在寻找\/[^.]+$,即/后跟除.之外的任何字符,直至结束。由于文件名+扩展名格式具有.字符,因此无法匹配第二种情况。

不要使用[^.]+$,而只检查/后面的字符不是.,并在之后匹配所有内容:

([a-zA-Z0-9_ -]*)\/[^.].*$

答案 1 :(得分:2)

虽然这里有一些建议可行,但我的建议是

\/[^.][^\/\n]+$

它找到一个斜杠,后跟除了点之外的任何东西,后面依次是一个或多个除了斜杠或{{1 }}

要处理作为示例给出的两行,

newline

需要 8 步骤。

建议的一切都有效,但Folder_1/.file Folder/file.png 采取 75 步骤,([a-zA-Z0-9_ -]*)\/[^.] 78 步骤,([a-zA-Z0-9_ -]*)\/[^.]+\.[^.]+\z采取 77 步骤。

这可能完全无关紧要,我可能错过了一些角度,但我想提一下;)

Se it here at regex101

答案 2 :(得分:0)

regex = %r{([a-zA-Z0-9_ -]*)\/[^.]}