2015-12-13 33 views
5

基本的なhtmlを使ってファイル拡張子を見つけるために使用できる正規表現があるのだろうかと思います。ファイル拡張子の正規表現

今私はこの問題は、すべての私のイメージは.JPGで終わりではありません

<img src="images/pimage/{$item['item_id']}/small.jpg"> 

を持っています。

だから私は小文字と大文字の両方に... .jpgに小さく、エンドで始まるすべての画像、.jpeg.JPG.png.gif、などを見つけることができ、通常のexpresionをしたいと思います。

すべての一致するファイルを見つけるために「小さい」の後に置くことができる単純な正規表現はありますか?

私は何が間違っているのか分かりませんが、私が提案を試してみると、出力には正規表現だけが表示され、目的の結果は表示されません。ここに私の現在のコードがあります

 function print_item($item,$link_change){ 
     $acticon= ($item['active']==TREEMAN_ITEM_ACTIVE)? 'active.gif' : 'disabled.gif'; 
     $tmpl_act=($this->section->webmode)? "<td><img src=\"".ADMIN_IMG_PATH."icons/{$acticon}\"></td>" : ""; 
     $tmpl_date=date('Y-m-d H:i',$item['cdate']); 
     $tmpl_added_by=$item['added_by']; 
     $tmpl_modified_by=$item['modified_by']; 
//  $tmpl_date_mod=date('Y-m-d H:i',$item['timestamp']); 
     $tmpl_date_mod=$item['timestamp']; 
     $res=<<<EOT 
<td >{$item['item_id']}</td> 
<td><a href="{$link_change}"</a><img src="/img/ucart/images/pimage/{$item['item_id']}/small.jpg" height="75" width="75"</td> 
<td class="tb" width="50%"><a href="{$link_change}" title="Edit item">{$item['item_name']}</a></td> 
<td>$tmpl_date</td> 
<td>$tmpl_date_mod</td> 
<td>$tmpl_added_by</td> 
<td>$tmpl_modified_by</td> 
$tmpl_act 
EOT; 

私は間違って何をしていますか?

+1

説明のために、ファイル名「small-filename.jpg」または正規表現をファイル全体のパスを取得しようとしていますか? 'images/pimage/27/small-filename.jpg'? – femmestem

+0

すべてのファイル名は小さい名前です。いくつかはsmall.jpg、small.JPG、small.png、small.gifなど... – Robert

答えて

2

あなたが列挙されてきた任意の拡張子に "小さな" と最後で始まるすべての画像をキャプチャするために正規表現:

/^small.*\.(jpe?g|gif|png|tiff)$/i

利用規約の説明:

^を -

で開始し

.* - 0文字以上の任意の文字に一致します。

\. - 期間に一致します。 \は、次の文字が文字通り解釈されるべきであることを意味するエスケープ文字です。.,?+などの文字は正規表現では意味があります。

(a|b|c) -

?を(例えば、次の文字がa又はb又はcであれば一致)かっこ内に含まれるものと一致

- 直前の文字が0回または1回(例えば、 jpe?gマッチ」を表示されることがあることを意味JPEG」それは 『E』を、1が含まれているとも一致するため、 『eがその位置にゼロ回)

$が表示されますので、JPGを』 - 一致するパターンの終わりを意味し

本の

/your-regex-pattern/i - (大文字と小文字)、大文字小文字を区別しないマッチ

あなたは、正規表現パターンマッチングの詳細については、この便利なチートシートをチェックアウトしたい場合:http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

+0

拡張子の前にあるピリオド以外のピリオドを含むファイルでは失敗します(例えば、 'small.heart.png'は失敗します)。有効なファイル名であっても)。また、最後は '(jpg | jpeg | gif | png | tiff)'でなければなりません(括弧を使わずにかっこを使います)。最後に、パターンの最後に '$'を指定して、ファイル拡張子に続く文字がないことを確認することができます(例えば、現在のパターンは 'small.jpg.php'や有効な画像拡張子に従うもの)。 – SpencerD

+0

@SpencerDoak '[]' vs '()'をキャッチしてくれてありがとう。ファイル名のエッジケースについては、私はあなたに完全に同意しますが、OPはファイル名がどのように表示されるかを私に教えてくれたので、それらについては説明しませんでした。 – femmestem

+3

もう1つのことは、「jpg | jpeg」を「jpe?g」に短縮できます – Gary

0

this page from www.Regular-Expressions.info、大文字と小文字の区別や他の類似matching-によると、 flags/optionsは通常、パターン自体に直接記述されるのではなく、プログラミング言語で実装されます。しかし、言語が一致するフラグ/オプションを渡すオプションを提供していない場合、上記のRegEx infoページには大文字と小文字の区別のようなオプションをパターンで指定することができます。

大文字小文字を区別しないようにパターンを指定するには、(?i)を大文字と小文字を区別しない部分の開始として指定し、(?-i)を大文字小文字を区別しない部分として指定します。

これは、次のRegExパターンが有効である可能性があることを意味します。\.(?i)(png|gif|jpg|jpeg|ico|bmp|svg|tiff)(?-i)$明らかに、このパターンは、画像ファイルタイプの追加または削除の必要性に合わせて変更することをお勧めします。

このパターンでは、\.はリテラルピリオド文字(.)を表します。 (?i)以降のすべての部品の大文字と小文字の区別は無効になります。 (png|gif|jpg|jpeg|ico|bmp|svg|tiff)はオプションのリストを示します。つまり、ファイル拡張子はリスト内のオプションのうちの1つだけでなければなりません。 (?-i)は大文字と小文字の区別を有効にします。 $は、文字列の末尾に印を付けます。つまり、ファイル拡張子の後には文字は使用できません。

あなたが使用している言語が別の方法で一致フラグを指定することをサポートしている場合は、言語の推奨方法を指定することをお勧めします。しかし、私が上にリンクしているRegEx情報ページによれば、これはパターン内でそれらを指定する適切な方法です()。パターンをさらに追加する場合は、パターン全体を大文字小文字を区別しないという利点があります) 。

EDIT:Javascriptが((?i)(?-i)を使用して)パターン自体の中にオンとオフの場合の感度を回してサポートしていないよう警告として、それが見えます。したがって、JavaScriptを使って作業している場合は、/iを式の末尾にフラグを設定するか、次のようなパターンを使用して回避する必要があります:\.([pP][nN][gG]|[jJ][pP][eE]?[gG]|[gG][iI][fF]|[iI][cC][oO]|[tT][iI][fF]{1,2})$。このパターンでは、内線内のすべての文字が大文字と小文字の両方で指定されます。これにより、書式がどのような場合でもパターンがファイル拡張子と一致するようになりますが、残りの式では大文字と小文字が区別されます。

1

多分、これはあなたを助けるでしょうか?

/\.\w+$/ 

(ドット記号と1(またはそれ以上)の入力文字列の末尾の単語クラス文字)

又は

/\.[a-z]+$/i 
/\.[a-zA-Z]+$/ 

(ドット記号と1(または入力文字列の最後の文字)

または

/\.[a-z]{1,4}$/i 
/\.[a-zA-Z]{1,4}$/ 

(ドット記号と入力文字列の末尾に1〜4文字)すべてのオプション出力のドット記号を有すること

お知らせ。
i -flagが存在するため、すべての正規表現は大文字と小文字を区別しません。


また、残念ながら、JavaScriptは(small.ストリングの後に1文字以上)ため、正規表現

/(?<=small\.)[a-z]+/i 

、後読みをサポートしていません

が動作しません。しかし、私はこのケースでは最高の正規表現になると思います。

関連する問題