URL1:/dir-images/no1/top-left.gif
URL2:/test-1/test-2/test
正则表达式:匹配之前的一切图像
我想,如果它是一个图像文件(URL1),又名/dir-images/no1/
相匹配的最后一个斜线之前的路径和匹配,如果整个路径它不是(URL2),/test-1/test-2/test
试图^([\=\/\.\w-]+\/)+
这可能最后一个斜线之前获得路径不管是后..
URL1:/dir-images/no1/top-left.gif
URL2:/test-1/test-2/test
正则表达式:匹配之前的一切图像
我想,如果它是一个图像文件(URL1),又名/dir-images/no1/
相匹配的最后一个斜线之前的路径和匹配,如果整个路径它不是(URL2),/test-1/test-2/test
试图^([\=\/\.\w-]+\/)+
这可能最后一个斜线之前获得路径不管是后..
尝试:
^([\=/.\w-]+/)+((?!.*\.gif$).*|)
与(?!)
的部分是一个向前看。这就像一个if语句。有两种不同的lookahead,?=
和?!
。第一个是正常的,如果第二个是'如果不是'。
就你而言,我只是问结局是不是gif
?然后我匹配一切。
的一种方式(与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
谢谢!我的问题是,如果结尾是.gif,它是否匹配最后一个斜杠之前的路径?因为我的正则表达式工具,它不会匹配任何东西。 – 2012-03-27 19:17:48
@ user1296363你只想知道整个事情是否以.gif结尾?然后试试'\ .gif $' – 2012-03-27 19:22:18
@ruakh我没有得到第一部分。我只是用管道解决了另一个问题,我完全忘记了这一点。 – 2012-03-27 19:24:17