1

如何在 ruby​​ 1.8 中执行匹配的正则表达式:

/my_dir/1/file

但如果我有:

/my_dir/1/deeper_stuff/file

到目前为止我有

 source_string = '/my_dir/1/index.html.erb'

 /^\/my_dir/.match(source_string)

对于初始比赛,我如何添加第二个取消资格/deeper_stuff

以便

 source_string = '/my_dir/1/deeper_stuff/'

被排除在外。

4

3 回答 3

7

负前瞻:/^\/my_dir(?!.*deeper_stuff)/.match(source_string)

于 2012-03-29T19:58:23.393 回答
1

RE = Regexp.new("^/my_dir/1(/.+)?/file$")

def is_file(dir)
   (m = RE.match(dir)) && !m[1] ? “匹配”:“不匹配”
结束

puts is_file("/my_file/1") #=> 不匹配
puts is_file("/my_dir/1/file") #=> 匹配
puts is_file("/my_dir/1/deeper_stuff/file") #=> 不匹配
puts is_file("/my_dir/1/deeper/stuff/file") #=> 不匹配

于 2012-03-29T20:21:50.503 回答
1

/^/my_dir/\w*/\w+.\S*/.match(source_string)假设所有文件都以句点结尾,然后是一些扩展名(包括多个扩展名,例如.html.erb),应该可以工作。

这通过搜索/my_dir/后跟任意数量的单词字符(字母、数字、下划线)和正斜杠来工作。这与下一个目录匹配。然后我们查找一个或多个单词字符,后跟一个句点,然后是任意数量的非空白字符。因此,/my_dir/deeper_stuff/file.html.erb将被排除,因为附加目录导致正则表达式不匹配。

于 2012-03-29T20:06:31.300 回答