2014-11-24 39 views
1

开始我使用一些代码,如我的Ruby脚本如下:正则表达式,如果目录与名称

if File.dirname(path) =~ /^www\.example\.com\/foo/ 

当一个文件只是一个子目录深下/foo这个伟大的工程,但不幸的是,条件将失败,如果该文件在下面说/foo/bar。我的问题是,上面的正则表达式可以修改为什么,以便File.dirname可以匹配任何至少在上面设置的条件下的文件,而不仅仅是一个深度的文件?

+0

您目录可以试试这个来代替/ foo [\/a-zA-Z] + – 2014-11-24 16:26:22

+0

基本上你想确定'path'是否在'/ foo'之下?不知道你在这里需要一个正则表达式。你可以比较每个字符串的开始,对吗? – tadman 2014-11-24 16:32:48

+0

问题是直接在'/ foo'下面的文件会在这里匹配,比如'/ foo/somedoc.txt',但是'/ foo/bar/somedoc.txt'不匹配。只要它位于'/ foo /'下面,我希望它评估为true。 – randombits 2014-11-24 16:37:03

回答

1

这是那些情况下,我会避开一个正则表达式完全之一:

if path.split(File::SEPARATOR)[0,2] == ['www.example.com','foo'] 

更可读的,没有逃脱需要的。

0

尝试File.fnmatch,它使用了一些匹配模式(类似但不正则表达式),对于你的情况,我们可以使用:

**foo** 

匹配所有文件路径包括一个名为foo

File.fnmatch('**foo**','foo/test.txt') 
#> true 
File.fnmatch('**foo**','/boo/foo/test.txt') 
#> true 
File.fnmatch('**foo**','/boo/test.txt') 
#> false