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文のようなものです。2 つの異なる先読みが?=
あり?!
ます。1 つ目は通常の if で、2 つ目は '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