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-]+\/)+、最後のスラッシュの前に何があったとしてもパスを取得できました..

4

2 に答える 2

2

試す:

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

の部分(?!)は先読みです。これはif文のようなものです。2 つの異なる先読みが?=あり?!ます。1 つ目は通常の if で、2 つ目は 'if not' です。

あなたの場合、エンディングが ? でないgifかどうかだけ尋ねます。そして、私はすべてを一致させます。

于 2012-03-27T19:09:44.737 に答える
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
于 2012-03-27T19:22:51.860 に答える