我正在尝试验证系统路径。如果此路径以某些目录开头并且彼此不包含两个点,则此路径有效。
#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/
但没有任何成功。
答案 0 :(得分:3)
规范不明确,但您可以使用否定前瞻来执行以下操作:
^(?!.*thatPattern)thisPattern$
以上内容会匹配与thisPattern
匹配的字符串,但如果匹配thatPattern
则不匹配。
以下是一个示例(as seen on rubular.com):
^(?!.*aa)[a-z]*$
这与^[a-z]*$
匹配,但如果它在任何地方都包含aa
则不会。
答案 1 :(得分:1)
^/home/user/(?!.*\.\.).*$
将符合你的良好模式并拒绝你的邪恶模式。