2016-11-09 4 views
-1

私は新しいWebサイトにコンテンツを整理して移行しています。いくつかの既存のページには、非標準フォルダ内のファイルにリンクする埋め込み画像があります。なぜ私のpreg_match_allステートメントがそれより多くキャプチャしていますか?

私は、データベースからレコードを引っ張った後、問題のある項目をキャプチャするために、「preg_match_all」をやっています。私の意図は、ファイル名を整理し、問題のファイルを移動して、データベースエントリを更新して新しい場所を反映させることです。

しかし、何らかの理由で私の正規表現文は(知られている複数の潜在的なヒットの)唯一の一致を検出しているようだ、と時々私はしたい文字列の下流にある他のものの全体の負荷をキャプチャするようです。

これは私が使っている表現のパターンです:

(?i)(<img.*src="uploads/RTEmagicC_(.*)")/ 

これは私が反対に一致していたデータベースからのコンテンツの一例である:

BLAH BLAH BLAH<img src="uploads/RTEmagicC_Herpes_simpex_virus.jpg.jpg" alt="HSV particles" style="FLOAT: left; WIDTH: 214px; HEIGHT: 198px" title="Electron micrograph of HSV particles©NASA">blah blah blah<img src="uploads/RTEmagicC_Herpes_labialis_01.jpg.jpg" alt="Coldsore" style="FLOAT: right;" title="Cold sore on the lower lip (cluster of fluid-filled blisters = very infectious). These infections may appear on the lips, nose or in surrounding areas.©Metju12" width="238" height="178">blah blah blah 

私がつかむしようとしています: "Herpes_simpex_virus.jpg.jpg""Herpes_labialis_01.jpg.jpg"および対応するフルリンクの例: "img src="uploads/RTEmagicC_Herpes_simpex_virus.jpg.jpg"

しかし、それはファイル名を閉じる"を超えて、下流のもののヒープにもマッチしています。

誰かが私の悲惨さから私を入れてくださいことはできますか? ...

多くのおかげで、私はこの上でいくつかの夜のために試してみたと明らかに私は愚かな何かをやっているが、私は何を参照することはできません。

+1

HTMLを解析するために正規表現を使用しないで、 'DOMDocument'のようなHTMLパーサーを使用してください。 – Barmar

+0

ありがとうございます。しかし、私はそれをどうやって行うのか、正規表現を使わないことの根拠は何も知らないことを認めなければなりません。あなたが説明することができますか、私に参考にしてください?ありがとう – Chris

+0

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – Barmar

答えて

-1

デフォルトでは、正規表現は貪欲に一致しているため、を含む可能な限り.*が一致し、最後にが見つかります。 imgの後に使用する.*についても同じことが言えます。できるだけ一致しない遅延マッチングを使用するには、?を量子に追加します。その場合、(?i)<img.*?src="uploads/RTEmagicC_(.*?)"になります。

テスト文字列の場合、.*?は不要で、単純な\s+(1つ以上の空白文字に一致)で十分ですが、これはすべてのデータでは当てはまりません。 2番目の.*?[^"]*に置き換えて、任意の数の非引用符と一致させることもできます。

+0

ありがとうございます;しかし、私は現在、RTEmagicC_ビットのファイル名の下流にキャプチャしていません。これが出てくるものです: 0 => 'HSV particles' Coldsore Chris

+0

それはどういう意味ですか? https://regex101.com/r/gubOWj/1 –

+0

申し訳ありません - 私は入力を終了する前に投稿しました。 – Chris

関連する問題