正则表达式:匹配除两个点之外的所有点

时间:2010-06-26 10:27:13

标签: regex validation path

我正在尝试验证系统路径。如果此路径以某些目录开头并且彼此不包含两个点,则此路径有效。

#valid path
/home/user/somedir/somedir_2
#evil path
/home/user/../somedir_2/

我知道如何检查路径中的两个点:

\.\. or [\.]{2}

但我真的想做那样的事情:

/home/user/<match everything but two dots>/somedir_2/

所以“匹配除了两个点之外的所有东西”可以是除了两个点之外的所有东西。

我试过了:

/home/user/[^\.{2}]*/somedir_2/

但没有任何成功。

2 个答案:

答案 0 :(得分:3)

规范不明确,但您可以使用否定前瞻来执行以下操作:

^(?!.*thatPattern)thisPattern$

以上内容会匹配与thisPattern匹配的字符串,但如果匹配thatPattern则不匹配。

以下是一个示例(as seen on rubular.com):

^(?!.*aa)[a-z]*$

这与^[a-z]*$匹配,但如果它在任何地方都包含aa则不会。

参考

答案 1 :(得分:1)

^/home/user/(?!.*\.\.).*$

将符合你的良好模式并拒绝你的邪恶模式。