正则表达式:在图像之前匹配所有内容

时间:2012-03-27 18:55:30

标签: regex inverse

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 个答案:

答案 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