url1:/dir-images/no1/top-left.gif
url2:/test-1/test-2/test
我想匹配最后一个斜杠之前的路径,如果它是图像文件(url1),又名/dir-images/no1/
如果不是(url2),/test-1/test-2/test
尝试^([\=\/\.\w-]+\/)+
这可能会在最后一个斜线之前获得路径,无论它是什么......
答案 0 :(得分:2)
尝试:
^([\=/.\w-]+/)+((?!.*\.gif$).*|)
(?!)
的部分是预测。这就像if语句。有两种不同的前瞻,?=
和?!
。第一个是正常的if,第二个是'if not'。
在你的情况下,我只是问结尾是不是gif
?然后我匹配一切。
答案 1 :(得分: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