【发布时间】:2012-03-27 18:55:30
【问题描述】:
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 语句。有两种不同的前瞻,?= 和 ?!。第一个是正常的 if,第二个是'if not'。
在你的情况下,我只是问结尾不是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
【讨论】: