2012-03-27 41 views
2

URL1:/dir-images/no1/top-left.gif
URL2:/test-1/test-2/test正则表达式:匹配之前的一切图像

我想,如果它是一个图像文件(URL1),又名/dir-images/no1/ 相匹配的最后一个斜线之前的路径和匹配,如果整个路径它不是(URL2),/test-1/test-2/test

试图^([\=\/\.\w-]+\/)+这可能最后一个斜线之前获得路径不管是后..

回答

2

尝试:

^([\=/.\w-]+/)+((?!.*\.gif$).*|) 

(?!)的部分是一个向前看。这就像一个if语句。有两种不同的lookahead,?=?!。第一个是正常的,如果第二个是'如果不是'。

就你而言,我只是问结局是不是gif?然后我匹配一切。

+0

谢谢!我的问题是,如果结尾是.gif,它是否匹配最后一个斜杠之前的路径?因为我的正则表达式工具,它不会匹配任何东西。 – 2012-03-27 19:17:48

+0

@ user1296363你只想知道整个事情是否以.gif结尾?然后试试'\ .gif $' – 2012-03-27 19:22:18

+0

@ruakh我没有得到第一部分。我只是用管道解决了另一个问题,我完全忘记了这一点。 – 2012-03-27 19:24:17

0

的一种方式(与perl味):

m|\A(.*/(?(?!.*\.gif$).*))| 

说明:

m| ... |    # Regexp. 
\A     # Begin of line. 
(     # Group 1. 
    .*/     # All characters until last slash. 
    (?     # Conditional expression. 
    (?!.*\.gif$)  # If line doesn't end with '.gif', match... 
    .*)    # ... until end of line. 
) 

测试...

script.pl内容:

use warnings; 
use strict; 

while (<DATA>) { 
    printf qq[%s\n], $1 if m|\A(.*/(?(?!.*\.gif$).*))|; 
} 

__DATA__ 
/dir-images/no1/top-left.gif 
/test-1/test-2/test 

运行它想:

perl script.pl 

而下面的结果:

/dir-images/no1/ 
/test-1/test-2/test